mysql 基础层

基础层

上图可以看出mysql架构主要分三个层次:

  第一层 client客户端 管理连接,权限验证

  第二层 server层 词法分析,语法分析,执行计划,索引选择,操作引擎,返回结果

  第三层 存储引擎 存储数据,提供读写接口

连接器

  ▪ 连接器负责跟客户端建立连接,获取权限、维持和管理连接
    – 用户名密码验证
    – 查询权限信息,分配对应的权限
    – 可以使用show processlist查看现在的连接
    – 如果太长时间没有动静,就会自动断开,通过wait_timeout控制,默认8小时
  ▪ 连接可以分为两类:
    – 长连接:推荐使用,但是要周期性的断开长连接
    – 短链接

查询缓存

  ▪ 当执行查询语句的时候,会先去查询缓存中查看结果,之前执行过的sql语句及其结果可能以key-value的形式存储在缓存中,如果能找到则直接返回,如果找不到,就继续执行后续的阶段

  ▪ 但是,不推荐使用查询缓存:
    – 1、查询缓存的失效比较频繁,只要表更新,缓存就会清空
    – 2、缓存对应新更新的数据命中率比较低

分析器

  ▪ 词法分析:Mysql需要把输入的字符串进行识别每个部分代表什么意思
    – 把字符串 T 识别成 表名 T
    – 把字符串 ID 识别成 列ID
  ▪ 语法分析:
  ▪ 根据语法规则判断这个sql语句是否满足mysql的语法,如果不符合就会报错“You have an error in your SQL synta”

优化器

  ▪ 在具体执行SQL语句之前,要先经过优化器的处理
    – 当表中有多个索引的时候,决定用哪个索引
    – 当sql语句需要做多表关联的时候,决定表的连接顺序
    – 等等
  ▪ 不同的执行方式对SQL语句的执行效率影响很大
    – RBO:基于规则的优化
    – CBO:基于成本的优化

mysql发送一个请求流程:

  1 连接器提供链接服务的,做一些权限认证,比如说用户名和密码匹配

  2 分析器分析sql语句,按照select from where等关键字进行切分,转成词法分析,最终变成AST(抽象语法树)

  3 优化器有两种方式:RBO(基于规则优化)、CBO(基于成本优化)

  4 执行器跟存储引擎进行数据交互

数据更新的流程:

  1 执行器先从引擎中找到数据,如果在内存中直接返回,如果不在内存中,查询后返回
  2 执行器拿到数据之后会先修改数据,然后调用引擎接口重新吸入数据
  3 引擎将数据更新到内存,同时写数据到redo中,此时处于prepare阶段,并通知执行器执行完成,随时可以操作
  4 执行器生成这个操作的binlog
  5 执行器调用引擎的事务提交接口,引擎把刚刚写完的redo改成commit状态,更新完成
 

性能监控

show prodile(会被慢慢淘汰)

performance schema(性能模块)

show processlist

不积跬步,无以至千里;不积小流,无以成江海
原文地址:https://www.cnblogs.com/hzzjj/p/15270036.html