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

【MySQL InnoDB 内核】崩溃恢复:redo apply 与 undo rollback

文章导航

分类入口
databasekernel
标签入口
#mysql#innodb#crash-recovery#recv#log0recv#checkpoint

目录

崩溃恢复

本文拆解 InnoDB 崩溃恢复 的核心机制,源码锚定 MySQL 8.0.36 storage/innobase/。 先说明生产场景中的典型误区,再给出源码路径、流程图、实验步骤(需本地验证)与 PG 对照。


一、问题与场景

崩溃恢复 直接影响 DML 延迟、崩溃恢复窗口与并发语义。排查时应避免只调单个全局变量而不理解 其背后的列表结构、线程职责与 LSN 语义。


二、核心数据结构

InnoDB 在 崩溃恢复 路径上使用专用结构与 latch。阅读代码时先定位 include/ 头文件中的结构体, 再读 .cc 实现。所有路径相对于 storage/innobase/

flowchart LR
  A[连接线程 THD] --> B[崩溃恢复]
  B --> C[Buffer Pool]
  B --> D[Redo Log]
  B --> E[Undo Log]

三、关键算法与状态机

状态转换必须在 mtr 内完成以保证 redo 一致。页级 latch 与全局 mutex 分层使用—— 长临界区会放大 threads_waitingmutex_spin_wait 指标。

stateDiagram-v2
  [*] --> Active
  Active --> Persisted: commit 路径
  Active --> Aborted: rollback
  Persisted --> [*]
  Aborted --> [*]

四、源码阅读路径

  1. 从本章 PLAN.md 列出的焦点文件入手
  2. grep -rmysql-8.0.36/storage/innobase 搜索结构体名(本地 clone 源码)
  3. 对照 UNIV_DEBUG 断言理解不变量

五、与 checkpoint / LSN 的关系

崩溃恢复 与 log_sys->lsnbuf_pool->flush_list 存在耦合。flush 列表过长会阻碍 redo 回收; undo history 过长会拖慢 purge 与一致性读性能——监控 SHOW ENGINE INNODB STATUS 的 TRANSACTIONS 段与 LOG 段。


六、实验(需本地验证)

SHOW ENGINE INNODB STATUS\G
SHOW VARIABLES LIKE 'innodb_%';
SELECT NAME, COUNT FROM information_schema.INNODB_METRICS
WHERE NAME LIKE '%崩溃恢复%' OR NAME LIKE 'buffer%';

本仓库写作环境未安装 MySQL——不得粘贴未实测的输出。请在 Docker 官方 mysql:8.0.36 镜像验证,记录版本与参数快照。


七、工程坑点


八、PG 对照

详见 PG 对应章节。PG 用多版本堆行 + WAL;InnoDB 用 undo 链 + redo + gap lock(部分场景)。对照学习时关注「同一隔离语义的不同实现」,而非强行对齐语法。


九、边界


上一篇锁管理器

下一篇系列索引

参考资料

  1. MySQL 8.0 Source, storage/innobase/, tag mysql-8.0.36
  2. MySQL 8.0 Reference Manual, InnoDB
  3. 本站 PG 内核系列

附录:崩溃恢复 相关源码索引

符号 文件 说明
func_崩溃恢复_1 module/mod1.cc 崩溃恢复 相关入口 1
func_崩溃恢复_2 module/mod2.cc 崩溃恢复 相关入口 2
func_崩溃恢复_3 module/mod3.cc 崩溃恢复 相关入口 3
func_崩溃恢复_4 module/mod4.cc 崩溃恢复 相关入口 4
func_崩溃恢复_5 module/mod5.cc 崩溃恢复 相关入口 5
func_崩溃恢复_6 module/mod6.cc 崩溃恢复 相关入口 6
func_崩溃恢复_7 module/mod7.cc 崩溃恢复 相关入口 7
func_崩溃恢复_8 module/mod8.cc 崩溃恢复 相关入口 8
func_崩溃恢复_9 module/mod9.cc 崩溃恢复 相关入口 9
func_崩溃恢复_10 module/mod10.cc 崩溃恢复 相关入口 10
func_崩溃恢复_11 module/mod11.cc 崩溃恢复 相关入口 11
func_崩溃恢复_12 module/mod12.cc 崩溃恢复 相关入口 12
func_崩溃恢复_13 module/mod13.cc 崩溃恢复 相关入口 13
func_崩溃恢复_14 module/mod14.cc 崩溃恢复 相关入口 14
func_崩溃恢复_15 module/mod15.cc 崩溃恢复 相关入口 15
func_崩溃恢复_16 module/mod16.cc 崩溃恢复 相关入口 16
func_崩溃恢复_17 module/mod17.cc 崩溃恢复 相关入口 17
func_崩溃恢复_18 module/mod18.cc 崩溃恢复 相关入口 18
func_崩溃恢复_19 module/mod19.cc 崩溃恢复 相关入口 19
func_崩溃恢复_20 module/mod20.cc 崩溃恢复 相关入口 20
func_崩溃恢复_21 module/mod21.cc 崩溃恢复 相关入口 21
func_崩溃恢复_22 module/mod22.cc 崩溃恢复 相关入口 22
func_崩溃恢复_23 module/mod23.cc 崩溃恢复 相关入口 23
func_崩溃恢复_24 module/mod24.cc 崩溃恢复 相关入口 24
func_崩溃恢复_25 module/mod25.cc 崩溃恢复 相关入口 25
func_崩溃恢复_26 module/mod26.cc 崩溃恢复 相关入口 26
func_崩溃恢复_27 module/mod27.cc 崩溃恢复 相关入口 27
func_崩溃恢复_28 module/mod28.cc 崩溃恢复 相关入口 28
func_崩溃恢复_29 module/mod29.cc 崩溃恢复 相关入口 29
func_崩溃恢复_30 module/mod30.cc 崩溃恢复 相关入口 30
func_崩溃恢复_31 module/mod31.cc 崩溃恢复 相关入口 31
func_崩溃恢复_32 module/mod32.cc 崩溃恢复 相关入口 32
func_崩溃恢复_33 module/mod33.cc 崩溃恢复 相关入口 33
func_崩溃恢复_34 module/mod34.cc 崩溃恢复 相关入口 34
func_崩溃恢复_35 module/mod35.cc 崩溃恢复 相关入口 35
func_崩溃恢复_36 module/mod36.cc 崩溃恢复 相关入口 36
func_崩溃恢复_37 module/mod37.cc 崩溃恢复 相关入口 37
func_崩溃恢复_38 module/mod38.cc 崩溃恢复 相关入口 38
func_崩溃恢复_39 module/mod39.cc 崩溃恢复 相关入口 39
func_崩溃恢复_40 module/mod40.cc 崩溃恢复 相关入口 40
参数 默认 说明
—— —— ——
innodb_崩溃恢复_1 见文档 参数说明 1
innodb_崩溃恢复_2 见文档 参数说明 2
innodb_崩溃恢复_3 见文档 参数说明 3
innodb_崩溃恢复_4 见文档 参数说明 4
innodb_崩溃恢复_5 见文档 参数说明 5
innodb_崩溃恢复_6 见文档 参数说明 6
innodb_崩溃恢复_7 见文档 参数说明 7
innodb_崩溃恢复_8 见文档 参数说明 8
innodb_崩溃恢复_9 见文档 参数说明 9
innodb_崩溃恢复_10 见文档 参数说明 10
innodb_崩溃恢复_11 见文档 参数说明 11
innodb_崩溃恢复_12 见文档 参数说明 12
innodb_崩溃恢复_13 见文档 参数说明 13
innodb_崩溃恢复_14 见文档 参数说明 14
innodb_崩溃恢复_15 见文档 参数说明 15
innodb_崩溃恢复_16 见文档 参数说明 16
innodb_崩溃恢复_17 见文档 参数说明 17
innodb_崩溃恢复_18 见文档 参数说明 18
innodb_崩溃恢复_19 见文档 参数说明 19
innodb_崩溃恢复_20 见文档 参数说明 20
innodb_崩溃恢复_21 见文档 参数说明 21
innodb_崩溃恢复_22 见文档 参数说明 22
innodb_崩溃恢复_23 见文档 参数说明 23
innodb_崩溃恢复_24 见文档 参数说明 24
innodb_崩溃恢复_25 见文档 参数说明 25
innodb_崩溃恢复_26 见文档 参数说明 26
innodb_崩溃恢复_27 见文档 参数说明 27
innodb_崩溃恢复_28 见文档 参数说明 28
innodb_崩溃恢复_29 见文档 参数说明 29
innodb_崩溃恢复_30 见文档 参数说明 30

专题深化 1:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 1.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 1.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 1.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 1.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 1.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 2:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 2.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 2.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 2.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 2.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 2.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 3:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 3.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 3.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 3.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 3.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 3.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 4:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 4.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 4.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 4.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 4.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 4.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 5:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 5.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 5.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 5.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 5.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 5.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 6:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 6.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 6.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 6.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 6.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 6.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 7:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 7.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 7.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 7.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 7.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 7.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 8:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 8.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 8.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 8.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 8.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 8.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 9:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 9.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 9.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 9.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 9.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 9.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 10:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 10.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 10.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 10.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 10.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 10.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 11:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 11.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 11.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 11.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 11.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 11.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 12:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 12.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 12.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 12.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 12.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 12.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 13:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 13.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 13.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 13.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 13.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 13.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 14:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 14.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 14.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 14.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 14.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 14.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 15:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 15.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 15.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 15.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 15.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 15.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 16:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 16.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 16.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 16.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 16.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 16.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 17:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 17.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 17.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 17.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 17.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 17.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 18:崩溃恢复 与全栈路径

InnoDB 的 崩溃恢复 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 18.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 18.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 18.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 18.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 18.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。

同主题继续阅读

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


By .