隔离级别与幻读
本文拆解 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 为准
上一篇:MVCC
下一篇:锁管理器
参考资料
- 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 内核】锁管理器:记录锁、间隙锁与 Next-Key Lock
S/X/IS/IX、记录锁/间隙锁/Next-Key Lock、死锁检测与 MDL 分工。
【MySQL InnoDB 内核】InnoDB 存储引擎机制深度拆解
从线程模型到页格式、从 undo log MVCC 到 binlog 两阶段提交——对 MySQL InnoDB 做源码级拆解,并与 PostgreSQL 内核系列逐章对照。20 篇覆盖内核机制与生产运维实战,面向 MySQL DBA、从 PG 转 MySQL 的后端与数据库内核开发者。
【MySQL InnoDB 内核】InnoDB 架构与线程模型
InnoDB handler 边界、Master/Purge/IO/Page Cleaner 线程、内存布局与 srv0srv.cc 启动路径。
【MySQL InnoDB 内核】页结构与行格式
FIL 页头、Infimum/Supremum、聚簇/二级索引、ROW_FORMAT 与 rem0rec.h 行头字段。