学习来源:极客大学mysql实将战

MySQL 逻辑架构图

image.png

总结

  • mysql由 Server层 和 存储引擎 组成

    • Server层
      • 核心功能:连接器 分析器 优化器 执行器 和 缓存
      • 内置函数:时间日期,加密等等
      • 其他跨存储引擎的功能(就是切换存储引擎不会产生影响的功能):触发器,视图等
    • 存储引擎
      • 主要是InnoDB 存储引擎,对外提供读写接口

        一句话

  • 程序的本质就是数据加操作,mysql也一样,数据就是存储引擎,操作就是Server层

  • 存储引擎存储数据 并对外提供操作数据的接口
  • 如果调用接口?==>通过Sql语句
  • 那是不是可以对Sql进行处理?==》Server层
  • 提供 认证 解析 优化 执行 和 缓存等核心服务,以及一下跨引擎的服务,比如工具函数,触发器,视图等等

Server层的核心

连接器

  • 认证登录 管理连接
    • 认证登录: mysql -h$ip -P$port -u$user -p
    • 管理连接: show processlist 查看
      • image.png
      • 没操作的连接会进入Sleep状态 默认Sleep8小时会自动断开
  • 注!太多长连接可导致MySQL的OOM

    • 可定期断开长连接
    • 5.7可执可在进行大操作后执行 mysql_reset_connection 重连

      缓存

  • 根据配置 有些查询会被缓存

    • 缓存命中时会直接返回缓存内容
    • 增删改时会清空相关缓存
  • 配置 query_cache_type

    • 关闭 开启 命令默认
    • 命令模式下 通过SQL_CACHE主动查询
      • select SQL_CACHE * from T where ID=10;

        分析器

  • 解析sql

    • 解析错误时抛 You have an error in your SQL syntax
    • 主要看 use near 后面的内容
    • image.png

      优化器

  • 会自动优化SQL的执行顺序之类的

    执行器

  • 鉴权 执行 加 日志

    • 判断是否有权操作该表
    • 根据优化后的SQL 调用存储引擎接口执行
    • 记录日志
      • 日志里有个 rows_examined 的属性代表扫描了多少行 可关注下