MySQL 架构大变革(全景版):从 5.7 到 9.7 的十年进化图谱
MySQL 5.7 系列集中式架构下的“局部突围”2014–2023MySQL 5.7 虽然整体上仍是“一切以 ibdata1 为中心”但在其 40 余个版本中InnoDB 团队进行了多项前瞻性的模块化尝试为后续彻底重构埋下伏笔。3.1 关键版本演进版本日期InnoDB 里程碑意义5.7.42014-03-31共享临时表空间首次从 ibdata1 独立ibtmp1第一个从“大仓库”中剥离的模块5.7.52014-09-25引入innodb_buffer_pool_dump_pctBuffer Pool 预热粒度精细化5.7.62015-03-10支持 32KB/64KB 页大小Online DDL 重构为大型页和在线变更奠定基础5.7.82015-08-03只读事务优化跳过部分事务对象开销纯查询场景吞吐量提升5.7.112016-02-05引入innodb_tmpdirOnline DDL 临时目录可独立指定避免 DDL 填满系统 tmpdir5.7.142016-07-29innodb_io_capacity精细化控制默认 max 提升至 200000更好地适配 SSD5.7.182017-04-10InnoDB 表空间加密正式 GA满足合规要求5.7.212018-01-15并行读取能力初步优化为后续并行 DDL 预热5.7.222018-04-19Change Buffer 合并触发机制改进减少 I/O 峰值5.7.232018-07-27临时表空间最大尺寸可控防止 ibtmp1 无限膨胀5.7.442023-10-255.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.02016-09-12事务数据字典mysql.ibd首次引入原子 DDL 奠基8.0.12017-04-10自增主键持久化8.0.22017-07-27Undo 表空间默认独立innodb_undo_tablespaces28.0.32017-09-21Redo Log 无锁写入多线程并发写 Log Buffer8.0.42018-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.132018-10-22TempTable 引擎支持 BLOB双写缓冲区参数精细化8.0.142019-01-21SQL 级动态管理 Undo 表空间CREATE UNDO TABLESPACE8.0.152019-02-01死锁检测可在线关闭innodb_deadlock_detect8.0.162019-04-25系统表空间mysql.ibd加密innodb_dedicated_server自动适配内存8.0.172019-07-22多线程 Page Cleaner 调度优化8.0.192020-01-13InnoDB 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.202020-04-27Doublewrite Buffer 从 ibdata1 独立到#ib_16384_0.dblwr文件8.0.222020-10-19Instant DDL 支持ADD COLUMN8.0.232021-01-18全文本索引性能优化8.0.272021-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.302022-07-26Redo Log 容量管理简化innodb_redo_log_capacity8.0.322023-01-17Instant DDL 支持DROP COLUMN8.0.362024-01-16锁系统性能稳定性加强8.0.412025-01-218.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.1Buffer Pool 持久化增强定期将热页列表保存至磁盘重启后加载消除冷启动预热9.2 – 9.3Change Buffer 分时限流合并将集中式合并改为分散在时间窗口平滑 I/O 波动9.4Log Buffer 在线调整innodb_log_buffer_size支持SET GLOBAL无需重启9.5Undo Buffer 独立拆分Redo 与 Undo 的刷盘路径解耦MVCC 场景更可控9.6Atomic 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.7MySQL 8.0 (8.0.27)MySQL 8.4 LTSMySQL 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预热比例可调持久化支持

相关新闻