深入浅出 MySQL 从架构到线程:剖析存储引擎、线程模型
MySQL 5.7 存储引擎优化
Undo日志表空间改进
- 用户可灵活配置Undo表空间数量(通过innodb_undo_tablespaces参数)
- 支持独立管理Undo空间
临时表空间
- 通过独立临时表空间文件(ibtmp1)存储临时表数据
动态Buffer Pool调整
- 支持通过SET GLOBAL在线调整大小
MySQL 8.0 存储架构优化
InnoDB表空间分离
- 将数据字段和Undo日志从共享表空间ibdata中完全分离
临时表空间增强
- 支持配置多个物理文件作为临时表空间
Doublewrite Buffer分离
- 从共享表空间ibdata中分离出来
InnoDB线程模型
IO Thread详解
Read Thread(4个默认)
- 负责从磁盘读取数据页到缓冲池
Write Thread(4个默认)
- 将缓冲池中的脏页刷新到磁盘
Log Thread(1个)
- 负责重做日志缓冲区的刷新
Insert Buffer Thread(1个)
- 处理变更缓冲(Change Buffer)的合并操作
配置参数:
innodb_read_io_threads -- 控制read thread数量
innodb_write_io_threads -- 控制write thread数量
Purge Thread
- 负责清理已提交事务的undo日志
Page Cleaner Thread
- 将缓冲池中的脏页刷新到磁盘
Master Thread
- 核心调度线程,负责协调其他后台线程
每秒执行操作:
- 日志缓冲区刷新
- 写缓冲区合并
- 脏页刷新
每10秒执行操作:
- 强制脏页刷新
- 全量写缓冲区合并
- undo页清理