土法炼钢兴趣小组的算法知识备份

【MySQL InnoDB 内核】InnoDB 存储引擎机制深度拆解

文章导航

分类入口
databasekernel
标签入口
#mysql#innodb#mvcc#undo-log#redo-log#buffer-pool#gap-lock#binlog#replication#btree#mysql-internals

目录

InnoDB 存储引擎机制深度拆解

中国工程环境里 PostgreSQL 与 MySQL 并存极普遍,但中文资料要么停在「调参手册」,要么只讲 SQL 层。InnoDB 的 undo log MVCC、gap lock、redo/binlog 两阶段提交、Change Buffer——这些与 PG 的 CLOG 多版本行、行锁、WAL 流复制在设计上有清晰分叉,却缺少一份对着源码讲机制、对着故障讲排查的系统性资料。

本站已完成 PostgreSQL 内核系列(26 篇)、MVCC 源码拆解存储工程(Buffer Pool、B-Tree、WAL 通用原理)。本系列是这些基础在 InnoDB 中的具体落地,每章末尾设「PG 对照」小节,引用 PG 系列对应篇章,帮助已读 PG 的工程师快速建立差异直觉。

系列定位:第 1–15 章为内核机制线(对着 storage/innobase/ 源码追踪 DML/查询路径);第 16–20 章为运维实战线(经典故障、性能调查、配置陷阱、主从切换)。版本锚定 MySQL 8.0 LTS(源码引用以 mysql-8.0.36 tag 为主),5.7 关键差异在文中标注。

系列状态:20 章已全部完成。

推荐入口

一、这个系列要回答的七个问题

  1. InnoDB 的线程模型和内存布局是什么? Master thread、purge thread、read/write IO thread、page cleaner——各自职责?Buffer Pool 如何划分 chunk 与 instance? → 第 1、2 章。

  2. 一条 UPDATE 从 SQL 到磁盘经历了什么? Server 层解析 → handler 接口 → Buffer Pool → undo → redo → doublewrite → 数据文件。 → 第 3、4、5、6 章。

  3. InnoDB 的 MVCC 为什么用 undo log 而不是 PG 式的多版本行? Read View、undo 链、RC vs RR、幻读与 gap lock。 → 第 7、8 章。

  4. InnoDB 的锁到底锁的是什么? 记录锁、间隙锁、Next-Key Lock、意向锁、MDL 与 PG 行锁模型的差异。 → 第 9 章。

  5. 崩溃恢复时 redo 和 undo 各做什么? Checkpoint、LSN、Mini-Transaction、恢复两阶段。 → 第 5、10 章。

  6. binlog 和 InnoDB redo 如何协调? 两阶段提交、XID、组提交、主从延迟来源。 → 第 11、12、13 章。

  7. InnoDB 最危险的故障模式是什么? 长事务 undo 膨胀、脏页 flush 跟不上、gap lock 死锁、半同步降级。 → 第 16–20 章。

二、篇目依赖关系与推荐阅读路径

flowchart TD
  A["01 架构与线程"] --> B["02 页结构与行格式"]
  B --> C["03 Buffer Pool"]
  C --> D["04 Redo Log"]
  B --> K["11 B+Tree"]
  D --> E["05 Undo Log"]
  E --> F["07 MVCC / Read View"]
  F --> G["08 隔离级别与幻读"]
  G --> H["09 锁管理器"]
  D --> I["10 崩溃恢复"]
  D --> J["12 Binlog 2PC"]
  J --> L["13 主从复制"]
  K --> N15["15 Change Buffer / AHI"]
  C --> N15
  J --> N14["14 Optimizer / Handler"]
  C --> M["16 监控"]
  E --> N["17 经典故障"]
  N --> O["18 性能调查"]
  O --> P["19 主从切换"]
  O --> Q["20 配置陷阱"]

推荐阅读路径

路径 篇目 适合
A:MySQL DBA 日常 1 → 3 → 7 → 9 → 16 → 17 → 20 排查问题为主
B:从 PG 转 MySQL 7 → 8 → 9 → 5 → 12 → 13(每章读 PG 对照) 建立差异直觉
C:内核开发者 1 → 2 → 3 → 4 → 5 → 10 → 11 存储与恢复
D:高可用 4 → 12 → 13 → 19 复制与切换
E:应急 17 → 18 → 20 → 16 先止血再深入
F:查询优化 11 → 14 → 15 索引与 handler 交界

三、目录与每篇一句话价值

第一部分:体系结构(第 1–2 章)

  1. InnoDB 架构与线程模型 InnoDB 在 MySQL Server 中的 handler 边界、后台线程职责表、srv0srv.cc 启动路径、Buffer Pool / Change Buffer / AHI / Log Buffer 内存全景。

  2. 页结构与行格式 FIL 页头、Infimum/Supremum、聚簇索引与二级索引、ROW_FORMAT 差异、rem0rec.h 行头字段——对照 PG 的 PageHeaderData

第二部分:存储与崩溃恢复(第 3–6 章)

  1. Buffer Pool 与 LRU chunk/frame、年轻/年老 LRU 分区、flush 列表、innodb_old_blocks_pctbuf0buf.cc 源码路径。

  2. Redo Log 内部机制 LSN、checkpoint、mtr、组提交与 innodb_flush_log_at_trx_commit 语义。

  3. Undo Log 与事务回滚 undo segment、insert/update undo、purge 线程、长事务 undo history 堆积。

  4. Doublewrite 与页完整性 部分页写问题、doublewrite buffer 两阶段写、8.0 变体。

第三部分:并发控制(第 7–10 章)

  1. MVCC 与 Read View 隐藏列、Read View 构造、RC vs RR 可见性算法、read0read.cc 源码路径。

  2. 隔离级别与幻读 当前读 vs 一致性读、RR 下 gap lock 与幻读复现实验。

  3. 锁管理器 记录锁、间隙锁、Next-Key Lock、死锁检测与 data_locks 观察。

  4. 崩溃恢复 redo apply → undo rollback、recv_recovery_from_checkpoint_start 两阶段。

第四部分:索引、复制与查询(第 11–15 章)

  1. B+Tree 与索引 聚簇索引即数据、二级索引回表、页分裂 btr_page_split、覆盖索引。

  2. Binlog 与两阶段提交 redo 与 binlog 的 XA 协议、ordered_commit 组提交、sync_binlog 与持久性组合语义。

  3. 主从复制机制 异步/半同步/GTID、MTS 并行复制、Seconds_Behind_Master 陷阱与延迟诊断。

  4. Optimizer 与 Handler 交界 handler::index_read、ICP、MRR、覆盖索引与 EXPLAIN ANALYZE 解读边界。

  5. Change Buffer 与 AHI ibuf 延迟二级索引写、merge 时机、8.0 默认关闭 AHI 的工程背景。

第五部分:运维实战(第 16–20 章)

  1. 监控体系 SHOW ENGINE INNODB STATUS 段落精读、Performance Schema 锁/事务/内存表、mysqld_exporter 指标映射。

  2. 经典故障模式 长事务 undo 膨胀、脏页 flush 风暴、gap lock 死锁链、主从延迟——现象、机制、排查 SQL、修复边界。

  3. 性能调查方法论 EXPLAIN ANALYZE → PFS 等待事件 → INNODB STATUS → iostat/perf 的分层调查法。

  4. 主从切换与数据恢复 mysqldump vs xtrabackup、binlog PITR、GTID failover 与 RESET MASTER 边界、误删恢复极限。

  5. 配置陷阱 innodb_buffer_pool_size、持久性参数组合、innodb_lock_wait_timeoutmax_connections 内存——症状与查验。

四、与其他系列的联动

系列 联动
postgresql-kernel 每章 PG 对照小节
db/mvcc 第 7 章前置
storage Buffer Pool、B-Tree、WAL 通用原理
distributed 复制一致性理论背景
observability 第 16 章 mysqld_exporter 与 SLO

五、写作进度

状态 篇目
已完成 01–20(全系列)

系列 index v2,2026-06-18 — 系列完结

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。


By .