InnoDB 架构图 (MySQL 5.7)FROM:
https://dev.mysql.com/doc/refman/5.7/en/innodb-architecture.html
InnoDB 架构图 (MySQL 9.7)FROM:https://dev.mysql.com/doc/refman/9.7/en/innodb-architecture.html
2026 年 4 月 21 日:MySQL 9.7.0 LTS 发布,成为新的长期支持版本【Long-Term Support (LTS) 版本线】。
2. Change Buffer
Change Buffer(早期版本叫 Insert Buffer)在 InnoDB 架构中既有内存部分,也有磁盘部分。
| 对比项 |
MySQL 5.7 |
MySQL 9.7 |
| 支持索引类型 |
仅非唯一二级索引 |
二级索引 + 全文索引 + 空间索引 |
| innodb_change_buffering 默认值 |
all |
none |
| 合并调度机制 |
集中合并,易出现 IO 峰值 |
分时限流合并,IO 波动平缓 |
3. Log Buffer
| 对比项 |
MySQL 5.7 |
MySQL 9.7 |
| 默认内存大小 |
16MB |
64MB |
| 参数修改方式 |
只读,必须重启生效 |
支持 SET GLOBAL 在线动态调整 |
| 刷盘与缓存架构 |
固定刷盘策略,redo/undo 耦合 |
自适应刷盘,undo buffer 独立拆分 |
4. Adaptive Hash Index (AHI)
| 对比项 |
MySQL 5.7 |
MySQL 9.7 |
| 锁机制 |
全局单一锁 |
分区细粒度锁 |
| 默认分区数量 |
8 |
64 |
| 分区数修改权限 |
只读,无法在线修改 |
支持在线动态调整 |
| 索引管控粒度 |
全局统一开关 |
支持单表单独开启 / 关闭 |
| 缓存淘汰策略 |
基础热度判定 |
综合访问频率+ 最近访问时间的淘汰策略(先踢低热度 → 再踢中热度 → 尽量保留高热度) |
MySQL 5.7 磁盘结构:所有核心元数据都塞在系统表空间 ibdata1,导致空间不可回收、耦合度高。
MySQL 9.7 磁盘结构:模块化拆分,数据字典、Undo、临时表空间独立,新增 General Tablespaces。
对每一类简要做一个对比:
| 组件 |
MySQL 5.7 |
MySQL 9.7 |
| 数据字典DD |
在 ibdata1 + .ibd 文件,双份元数据(二边同步维护代价高) |
独立 Data Dictionary Tablespace,.ibd 不再存字典 |
| Undo |
默认在 ibdata1,空间不可收缩 |
独立 Undo Tablespaces,支持多个文件,在线收缩 |
| 临时表空间 |
单文件,性能差 |
多文件 InnoDB 临时表空间,支持事务和索引 |
| DoubleWrite Buffer |
必需,位于 ibdata1 |
Atomic I/O 替代,适配 NVMe |
| General Tablespaces |
不支持 |
新增,支持多表共享 |