崩溃恢复
本文拆解 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_waiting 与 mutex_spin_wait
指标。
stateDiagram-v2
[*] --> Active
Active --> Persisted: commit 路径
Active --> Aborted: rollback
Persisted --> [*]
Aborted --> [*]
四、源码阅读路径
- 从本章 PLAN.md 列出的焦点文件入手
- 用
grep -r在mysql-8.0.36/storage/innobase搜索结构体名(本地 clone 源码) - 对照
UNIV_DEBUG断言理解不变量
五、与 checkpoint / LSN 的关系
崩溃恢复 与
log_sys->lsn、buf_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
镜像验证,记录版本与参数快照。
七、工程坑点
- 5.7 与 8.0 线程模型差异未标注就套用旧文档
- 把 SQL 事务与 mtr 混为一谈
- 单实例压测结论推广到多实例生产
- 忽略
innodb_page_size对页内结构的影响
八、PG 对照
详见 PG 对应章节。PG 用多版本堆行 + WAL;InnoDB 用 undo 链 + redo + gap lock(部分场景)。对照学习时关注「同一隔离语义的不同实现」,而非强行对齐语法。
九、边界
- 社区版 MySQL 8.0.36;不覆盖 Aurora/RDS 内部实现
- 不展开 MySQL Server 优化器全文
- MariaDB fork 以 Release Notes 为准
上一篇:锁管理器
下一篇:系列索引
参考资料
- MySQL 8.0 Source,
storage/innobase/, tagmysql-8.0.36 - MySQL 8.0 Reference Manual, InnoDB
- 本站 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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 1.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 2.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 3.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 4.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 5.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 6.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 7.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 8.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 9.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 10.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 11.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 12.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 13.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 14.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 15.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 16.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 17.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
进入存储引擎;每次页级修改包在
mtr(mtr0mtr.cc)内,保证 redo
记录与页 latch 的原子性。SQL 事务边界由 Server 层
trans_commit 触发 InnoDB
trx_commit,后者可能触发 redo 刷盘与 binlog
2PC(第 12 章)。
专题深化 18.1 同步原语层次
短临界区用 mutex_enter /
mutex_exit(sync0sync.cc);buffer
页内容用
rw_lock_s/x(sync0rw.cc);
事务系统全局状态用
trx_sys->mutex。performance_schema
中 wait/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
为准。
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【MySQL InnoDB 内核】Redo Log 内部机制:LSN、mtr 与组提交
Redo log buffer、LSN、checkpoint、mtr 记录类型与 innodb_flush_log_at_trx_commit 语义。
【MySQL InnoDB 内核】InnoDB 架构与线程模型
InnoDB handler 边界、Master/Purge/IO/Page Cleaner 线程、内存布局与 srv0srv.cc 启动路径。
【MySQL InnoDB 内核】页结构与行格式
FIL 页头、Infimum/Supremum、聚簇/二级索引、ROW_FORMAT 与 rem0rec.h 行头字段。
【MySQL InnoDB 内核】Buffer Pool 与 LRU:frame、flush 列表与 young/old 分区
Buffer Pool 实例、LRU 年轻/年老分区、flush 列表、buf_page_get 路径与 read-ahead。