深入浅出 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

  • 核心调度线程,负责协调其他后台线程

每秒执行操作:

  1. 日志缓冲区刷新
  2. 写缓冲区合并
  3. 脏页刷新

每10秒执行操作:

  1. 强制脏页刷新
  2. 全量写缓冲区合并
  3. undo页清理