MySQL 5.7 系列:集中式架构下的“局部突围”(2014–2023) MySQL 5.7 虽然整体上仍是“一切以 ibdata1 为中心”但在其 40 余个版本中InnoDB 团队进行了多项前瞻性的模块化尝试为后续彻底重构埋下伏笔。3.1 关键版本演进版本 日期 InnoDB 里程碑 意义5.7.4 2014-03-31 共享临时表空间首次从 ibdata1 独立ibtmp1 第一个从“大仓库”中剥离的模块5.7.5 2014-09-25 引入 innodb_buffer_pool_dump_pct Buffer Pool 预热粒度精细化5.7.6 2015-03-10 支持 32KB/64KB 页大小Online DDL 重构 为大型页和在线变更奠定基础5.7.8 2015-08-03 只读事务优化跳过部分事务对象开销 纯查询场景吞吐量提升5.7.11 2016-02-05 引入 innodb_tmpdirOnline DDL 临时目录可独立指定 避免 DDL 填满系统 tmpdir5.7.14 2016-07-29 innodb_io_capacity 精细化控制默认 max 提升至 200000 更好地适配 SSD5.7.18 2017-04-10 InnoDB 表空间加密正式 GA 满足合规要求5.7.21 2018-01-15 并行读取能力初步优化 为后续并行 DDL 预热5.7.22 2018-04-19 Change Buffer 合并触发机制改进 减少 I/O 峰值5.7.23 2018-07-27 临时表空间最大尺寸可控 防止 ibtmp1 无限膨胀5.7.44 2023-10-25 5.7 最终版10 月 31 日 EOL 五年扩展支持结束3.2 重要演进解读临时表空间独立5.7.4这是 InnoDB 第一次将一类核心数据从 ibdata1 中移出。内部临时表和显式临时表存储于独立的 ibtmp1 文件可单独配置大小和位置避免临时数据污染系统表空间。Buffer Pool 预热精细化5.7.5在 5.6 时代Buffer Pool 转储/加载只有全量模式。5.7.5 引入 innodb_buffer_pool_dump_pct默认 25允许仅转储最热的一部分页面大大缩短实例重启后的预热时间。I/O 能力控制增强5.7.14innodb_io_capacity 默认值从 200 提升到 2000实际 5.7 早期默认 2005.7.14 后更强调参数的控制效果。innodb_io_capacity_max 默认值直接提升至 200000匹配当代 SSD 的爆发放置能力。表空间加密5.7.18支持对独立表空间.ibd进行透明数据加密采用 Keyring 插件管理密钥。这使得 MySQL 能够满足 PCI-DSS、GDPR 等合规要求。Change Buffer 调度改进5.7.225.7.22 对 Change Buffer 的合并策略做了重要修正减少因合并操作导致的 I/O 突发使 I/O 负载更加平滑。临时表空间可控5.7.23通过 innodb_temp_data_file_path 可设置最大尺寸如 ibtmp1:12M:autoextend:max:10G防止失控查询撑爆磁盘。3.3 5.7 时代的遗留痛点尽管 5.7 做出了诸多局部优化其根本性缺陷依然存在数据字典、Undo、Doublewrite 仍挤在 ibdata1空间只增不缩DDL 非原子性中途失败可能留下孤表或损坏的字典无独立 General Tablespaces用户只能在“每个表一个 .ibd”和“全部塞进 ibdata1”之间二选一。解决这些问题必须依靠下一代的架构重构——MySQL 8.0。四、MySQL 8.0 系列十年架构重构的主战场2016–2026MySQL 8.0 从 2016 年 9 月首个开发里程碑到 2026 年 5 月 EOL历时近十年发布了超过 40 个小版本。它完成了 InnoDB 历史上最彻底的一次底层重塑——从数据字典到 Undo、从 Redo Log 到 Doublewrite几乎每一个磁盘组件都被重新设计。4.1 开发里程碑与候选版8.0.0 – 8.0.4版本 日期 重大变革8.0.0 2016-09-12 事务数据字典mysql.ibd首次引入原子 DDL 奠基8.0.1 2017-04-10 自增主键持久化8.0.2 2017-07-27 Undo 表空间默认独立innodb_undo_tablespaces28.0.3 2017-09-21 Redo Log 无锁写入多线程并发写 Log Buffer8.0.4 2018-01-23 默认内存临时表从 MEMORY 引擎变更为 TempTable 引擎解读事务数据字典8.0.0所有元数据表、列、索引等从 .frm 文件移入 InnoDB 的系统表中DDL 变为原子操作不再有“部分成功”状态。这是 8.0 最基础的重构。Undo 独立8.0.2虽然 5.7 已经支持独立 Undo 表空间但默认仍为 0。8.0.2 将默认值改为 2即安装后自动创建两个 Undo 表空间undo_001、undo_002Undo 从此彻底脱离 ibdata1。Redo Log 无锁写入8.0.3传统 Redo Log 写入需要竞争全局 mutex高并发下成为瓶颈。8.0.3 允许多个用户线程同时写入 Log Buffer极大提升了事务日志吞吐量。TempTable 引擎8.0.4新的内存临时表引擎支持变长字段VARCHAR/VARBINARY优于 MEMORY 引擎的固定长度存储减少内存浪费和磁盘落盘。4.2 正式 GAMySQL 8.0.112018-04-198.0.11 是 MySQL 8.0 的首个 General AvailabilityGA 版本标志着上述所有重构已可安全用于生产。自此8.0 系列进入长期支持阶段同时继续添加新特性。4.3 功能丰富与性能优化8.0.12 – 8.0.19版本 日期 关键特性8.0.13 2018-10-22 TempTable 引擎支持 BLOB双写缓冲区参数精细化8.0.14 2019-01-21 SQL 级动态管理 Undo 表空间CREATE UNDO TABLESPACE8.0.15 2019-02-01 死锁检测可在线关闭innodb_deadlock_detect8.0.16 2019-04-25 系统表空间mysql.ibd加密innodb_dedicated_server 自动适配内存8.0.17 2019-07-22 多线程 Page Cleaner 调度优化8.0.19 2020-01-13 InnoDB ReplicaSet 正式 GA解读动态 Undo 管理8.0.14DBA 可以随时 CREATE UNDO TABLESPACE 添加新的 Undo 表空间或 ALTER UNDO TABLESPACE … SET INACTIVE 再 DROP配合在线截断功能彻底解决了 Undo 空间回收难题。死锁检测可控8.0.15在高并发系统中死锁检测本身可能消耗大量 CPU。设置 innodb_deadlock_detectOFF 后依赖 innodb_lock_wait_timeout 超时机制可提升吞吐量。系统表空间加密8.0.16此前只能加密用户表空间现在连数据字典所在的 mysql.ibd 也可加密实现了全实例加密。4.4 核心组件独立高峰8.0.20 – 8.0.27版本 日期 里程碑事件8.0.20 2020-04-27 Doublewrite Buffer 从 ibdata1 独立到 #ib_16384_0.dblwr 文件8.0.22 2020-10-19 Instant DDL 支持 ADD COLUMN8.0.23 2021-01-18 全文本索引性能优化8.0.27 2021-10-19 并行 DDLinnodb_ddl_threads4解读Doublewrite 独立8.0.20这是极其关键的一步。双写缓冲区长久以来固定在 ibdata1 开头与系统表空间耦合。8.0.20 将其迁出成为独立的双写文件每个 Buffer Pool 实例对应两个文件。这降低了写延迟也为后续使用 Atomic I/O 彻底替代 Doublewrite 铺平了道路。Instant DDL ADD COLUMN8.0.22当在表末尾添加列时不再需要重建表和数据只需修改数据字典中的表定义。对于超大表TB 级此操作从小时级降至毫秒级。并行 DDL8.0.27创建或重建二级索引时可使用多个线程并行排序和构建。这是 DDL 性能的里程碑——索引创建时间与 CPU 核心数近似成反比极大缩短了大表维护窗口。4.5 后期收敛与维护8.0.30 – 8.0.41版本 日期 变化8.0.30 2022-07-26 Redo Log 容量管理简化innodb_redo_log_capacity8.0.32 2023-01-17 Instant DDL 支持 DROP COLUMN8.0.36 2024-01-16 锁系统性能稳定性加强8.0.41 2025-01-21 8.0 系列后期版本安全修复为主解读Redo Log 简化8.0.30过去需要同时配置 innodb_log_file_size 和 innodb_log_files_in_group易出错。8.0.30 引入 innodb_redo_log_capacity默认 100M自动管理文件数量和大小。Instant DROP COLUMN8.0.32扩展 Instant DDL 能力删除列也可瞬间完成。生命周期终点MySQL 8.0 于 2026 年 5 月 1 日 正式结束扩展支持所有用户被强烈建议升级至 8.4 LTS 或 9.7 LTS。五、MySQL 8.4 LTS双轨制下的“稳定基座”20242024 年 4 月 30 日Oracle 发布了 MySQL 8.4.0 LTS这是新双轨制LTS Innovation下的第一个长期支持版本。8.4 LTS 并未引入大量新特性其核心任务是稳定化 8.0 系列的所有架构成果事务数据字典、独立 Undo、原子 DDL、并行 DDL 等调整默认值 以适配现代硬件和最佳实践例如innodb_change_buffering 默认值从 all 改为 noneNVMe SSD 下合并收益变小mysql_native_password 默认禁用Buffer Pool 实例数量自动随 CPU 核数调整。为 Innovation 版本铺路8.4 作为长期支持版本的基准使得后续 9.0 创新版可以更大胆地试验新功能。对于大多数生产环境8.4 LTS 是比 8.0 更可靠的升级目标也是最终走向 9.7 LTS 的必要跳板。六、MySQL 9.x Innovation 系列为 LTS 做实战打磨2024–2026从 2024 年 7 月开始MySQL 进入 Innovation 快速迭代期。9.0、9.1、9.2 …… 9.6 每季度发布一个新版本每个版本都包含若干 InnoDB 层面的优化。这些优化在 9.7 LTS 中被统一集成。6.1 创新版关键 InnoDB 改进汇总版本范围 引入的优化 说明9.0 – 9.1 Buffer Pool 持久化增强 定期将热页列表保存至磁盘重启后加载消除冷启动预热9.2 – 9.3 Change Buffer 分时限流合并 将集中式合并改为分散在时间窗口平滑 I/O 波动9.4 Log Buffer 在线调整 innodb_log_buffer_size 支持 SET GLOBAL无需重启9.5 Undo Buffer 独立拆分 Redo 与 Undo 的刷盘路径解耦MVCC 场景更可控9.6 Atomic I/O 实验性支持 对 NVMe SSD 启用原子写入可绕过 Doublewrite Buffer6.2 重要特性详解Buffer Pool 持久化9.0虽然 5.6/5.7/8.0 已支持 innodb_buffer_pool_dump_now但需要手动触发。9.0 引入自动后台 dump默认每 10 秒检查变化并将热页列表以更紧凑的格式存储。实例重启后加载速度比旧方式快数倍适合云环境频繁弹性伸缩的场景。LRU 多级淘汰9.2传统的 LRU 采用“中点插入”策略但面对扫描密集型负载仍可能污染缓存。9.2 引入了三级热度区分低热度页优先淘汰中热度页次之高热度页尽量保留。这使得热点数据在缓存中停留时间更长。Change Buffer 分时限流9.3此前 Change Buffer 的合并由一个后台线程周期性全量触发容易产生 I/O 尖峰。9.3 改为分布式调度将合并任务拆分成小批次均匀分配到秒级时间窗口内写 I/O 负载更加平滑对 SSD 寿命也更友好。Atomic I/O 试验9.6现代 NVMe SSD 支持“原子域”Atomic Write Unit例如保证 16KB 写入的完整性。9.6 开始InnoDB 能够检测此类设备并自动将数据页直接写入数据文件无需先写 Doublewrite Buffer。这消除了双写带来的写放大提升写密集型负载性能。此功能在 9.7 LTS 中得到正式支持和默认启用。七、MySQL 9.7 LTS十年演进的集大成者20262026 年 4 月 21 日MySQL 9.7.0 LTS 发布。它吸收了 8.4 LTS 的稳定性、9.x Innovation 的所有优化并最终完成了 InnoDB 模块化与硬件自适应架构的完整落地。7.1 内存架构的最终形态组件 9.7 LTS 最终特性Buffer Pool 细粒度锁 持久化热页 三级 LRU 多实例在线调整对业务影响极小Change Buffer 默认关闭none但可按需开启并支持分时限流合并Log Buffer 默认 64MB支持在线调整Undo Buffer 独立刷盘AHI 分区锁默认 8 分区可在线修改支持单表开关多级淘汰策略7.2 磁盘架构的最终形态组件 9.7 LTS 最终特性数据字典 独立 Data Dictionary Tablespacemysql.ibd不再依赖 ibdata1Undo 独立多 Undo 表空间支持 SQL 动态管理在线自动截断临时表空间 多文件 会话级隔离支持事务可独立回收Doublewrite 被 Atomic I/O 替代在 NVMe 设备上默认禁用消除写放大General Tablespaces 成熟稳定支持多表共享可放置于任何存储路径7.3 Atomic I/O 的正式引入在 9.7 LTS 中Atomic I/O 已从实验性转为生产可用。当底层 NVMe SSD 报告支持原子写入时InnoDB 自动将 Doublewrite Buffer 关闭数据页直接写入目标文件。这一改变减少 100% 的额外写入原本每页写两次降低写放大系数延长 SSD 寿命提升写密集型负载吞吐量例如大量 INSERT、UPDATE。对于无法保证原子写入的设备如机械硬盘或较老的 SSD9.7 LTS 仍可启用传统的 Doublewrite Buffer 模式保持兼容性。八、全景对照表从 5.7 到 9.7 的关键跨越架构维度 MySQL 5.7 MySQL 8.0 (8.0.27) MySQL 8.4 LTS MySQL 9.7 LTS数据字典 ibdata1 .frm双份 事务数据字典mysql.ibd 稳定化事务字典 独立字典表空间Undo 管理 默认 ibdata1可独立但不灵活 默认独立支持在线截断 继承 8.0 多表空间 自适应扩展策略Doublewrite 固定在 ibdata1 独立双写文件8.0.20 独立双写 Atomic I/O 替代Change Buffer 默认 all集中合并 仍为 all但调度改进 默认 none 默认 none 分时限流AHI 全局单锁 分区锁8.0 分区锁 分区锁 单表开关 在线调整分区数Buffer Pool 预热比例可调 持久化支持 自动实例数 持久化 三级 LRU并行 DDL 不支持 支持8.0.27 支持 成熟并行 缓冲区自适应临时表空间 单文件 ibtmp1 会话级 全局级 继承 多文件并发 事务General Tablespaces 不支持 支持8.0.0 支持 成熟多表共享硬件适配 仅基础 I/O 参数 SSD 优化 NVMe 默认调优 Atomic I/O 生产就绪