深入学习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)解决
- 串行化:效率低下