深入学习MySQL原理 | 青训营笔记

166 阅读2分钟

深入学习MySQL原理 | 青训营笔记

这是我参与「第三届青训营 -后端场」笔记创作活动的的第 4 篇笔记 ~

  • 一条SQL语句到执行经历的步骤

    • 连接器:连接器负责跟客户端建立连接、获取权限、维持和管理连接

    • 查询缓存:(高版本MySQL已经默认不用了)

    • 分析器:对要执行的SQL语句进行解析

      • 词法分析:提取关键字,比如 select,提出查询的表,提出字段名,提出查询条件等等
      • 语法分析:把提取出的Token转换为抽象语法树后进行检验。主要就是判断你输入的 sql 是否正确,是否符合 MySQL 的语法
    • 优化器:查询优化器会选择一条最优查询路径
    • 执行器:先校验该用户有没有权限,如果没有权限,就会返回错误,如果有权限,就会去调用引擎的接口,返回接口执行的结果。
    • 执行引擎:存储引擎是对底层物理数据执行实际操作的组件,为Server层提供各种操作数据的 API
  • buffer pool:缓存MySQL一些页数据,提高MySQL的响应速度,防止每次的操作都磁盘。由三个链表管理

    • Free List
    • Flush List
    • LRU List
  • 触发脏页的刷新

    • 当 redo log 日志满了的情况下,会主动触发脏页刷新到磁盘;
    • Buffer Pool 空间不足时,需要将一部分数据页淘汰掉,如果淘汰的是脏页,需要先将脏页同步到磁盘;
    • MySQL 认为空闲时,后台线程回定期将适量的脏页刷入到磁盘;
    • MySQL 正常关闭之前,会把所有的脏页刷入到磁盘
  • 四大隔离级别

    • 读未提交:有脏读现象
    • 读已提交:不可重复读
    • 可重复读:有幻读现象,用next-key(行锁+gap key)解决
    • 串行化:效率低下