MySQL运行机制


MySQL运行机制

文章插图
【MySQL运行机制】 
  • 建立连接(Connector & Connection Pool)
    • 通过客户端/服务器通信协议与MySQL建立连接,MySQL客户端与服务端的通信方式是”半双工“ 。
      • "单工"(simplex):单工通信只支持信号在一个方向上传输(正向或反向),任何时候不能改变信号的传输方向 。为保证正确传送数据信号,接收端要对接收的数据进行校验,若校验出错,则通过监控信道发送请求重发的信号 。
      • "半双工"(half-duplex):半双工通信允许信号在两个方向上传输,但某一时刻只允许信号在一个信道上单向传输 。因此,半双工通信实际上是一种可切换方向的单工通信 。
      • "全双工"(full-duplex):全双工通信允许数据同时在两个方向上传输,即有两个信道,因此允许同时进行双向传输 。全双工通信是两个单工通信方式的结合,要求收发双方都有独立的接收和发送能力 。
    •  

MySQL运行机制

文章插图
 
      • Id:线程ID
      • User:执行当前线程的用户
      • Host:发送请求的客户端IP和端口号
      • db:执行当前线程的数据库
      • Command:该线程正在执行的操作命令
        • Create DB:正在创建库操作
        • Drop DB:正在删除库操作
        • Execute:正在执行一个PreparedSTatement
        • Close Stmt:正在关闭一个PreparedStatement
        • Query:正在执行一个语句
        • Daemon:置后台
      • Time:该线程处于当前状态的时间,单位s
      • State:线程状态
        • Updating:正在搜索匹配结果,进行修改
        • Sleeping:正在等待客户端发送新请求
        • Starting:正在执行请求处理
        • Checking table:正在检查数据表
        • Closing table:正在将表中数据刷新到磁盘中
        • Locked:被其他查询lock
        • Sending Data:正在处理select查询,同时将结果发送给客户端
      • Info:记录线程执行的语句,默认显示前100个字符 。show full processlist,查看完成的Info信息
  • 查询缓存(Cache & Buffer)
    • 查看查询缓存是否启动、空间大小、限制等

MySQL运行机制

文章插图
 
    • 查看更详细的缓存参数,可用缓存空间、缓存块、缓存占用大小等

MySQL运行机制

文章插图
 
    • 开启缓存缓存也不会生效的相关命令
      • 查询语句使用SQL_NO_CACHE
      • 查询结果大于query_cache_limit设置
      • 查询中有不确定的参数,比如now()
  • 解析器(Parser)
    • 将客户端发送的SQL进行语句解析,生成"解析数" 。预处理器根据MySQL规则检查"解析数"是否合法,最后生成新的"解析数"
  • 查询优化器(Optimizer)
    • 根据"解析数"生成最优的执行计划 。优化策略:静态优化(编译时优化)、动态优化(运行时优化) 。
      • 等价变换策略:基于无效查询(1=1)、变量查询(a < b and a = 5)、联合索引等的优化
      • 优化count、min、max等函数
        • InnoDB引擎min函数只需要找索引最左边的数据
        • InnoDB引擎man函数只需要找索引最右边的数据
        • MyISAM引擎count(*)直接返回
      • 提前终止查询:使用limit查询,获取limit所需的数据之后,停止遍历后面的数据
      • in的优化:对in查询,会先对in中的数据进行排序,然后再采用二分法查询数据 。
  • 查询执行引擎
    • 负责执行SQL语句,会根据表中的存储引擎类型,以及对应的API接口与底层存储引擎缓存/物理文件交互,得到结果并返回客户端 。
    • 若开启查询缓存,会将SQL语句和结果完整的保存在查询缓存(Cache & Buffer)中,若再次查询则直接返回结果 。
    • 如果需要返回的结果过多,则采用增量模式返回 。




    推荐阅读