转自博客园
概述
此处用的InnoDB引擎做解析。
介绍
Sever层
1. 连接器
- 负责与客户端的通信,半双工通道;
- 验证用户名和密码。
2. 缓存
如果开启了缓存,则先判断缓存中是否存在当前SQL语句对应的键值对,如果没有则直接下一步。
如果表更改,则该表的所有高速缓存都变为无效且被缓存中删除。
3. 解析器
对SQL语句进行分析,包括预处理和解析过程,并对关键词的提取,解析并组成一个解析树。
4. 优化器
优化器会根据执行计划选择最优的选择,匹配合适的索引,选择最佳的方案。
5. 执行器
执行器会调用对应的存储引擎执行SQL语句。
存储引擎(InnoDB)层
1. undo log
用于保证数据的原子性,保存了事务发生之前的数据的一个版本,可以用于回滚。同时,undo log 也是 MVCC (多版本并发控制) 实现的关键。
2. redo log
redo log包含两个部分:一个是内存中的日志缓冲(redo log buffer),另一个是磁盘上的日志文件(redo log file)。MySQL 每执行一条 DML 语句,先将记录写入 redo log buffer,后续某个时间点再一次性将多个操作记录写到 redo log file。
比较
undo log用于数据的回滚,保证事务隔离级别实现。
redo log是用于对暂不更新到磁盘上的操作进行记录,使得其可以延迟落盘,保证程序的效率。
MySQL 是 WAL(Write-Ahead Logging)机制,也就是写操作会先存入日志,然后再写入磁盘,这样可以避开高峰,提高数据库的可用性。