2026-06-18 · database / kernel
【MySQL InnoDB 内核】InnoDB 架构与线程模型
InnoDB handler 边界、Master/Purge/IO/Page Cleaner 线程、内存布局与 srv0srv.cc 启动路径。

























告警只盯 Threads_running
时,真正的问题可能是 history list length
暴涨(purge 滞后)或 log mutex
等待——它们在 SHOW ENGINE INNODB STATUS
里有专门段落,却不在 SHOW GLOBAL STATUS
顶层。MySQL 8.0 的 Performance Schema
把锁、事务、内存分配细到线程级;配合 Prometheus
mysqld_exporter 才能做 SLO。
本文对照 PG 监控篇,版本 8.0.36。
flowchart TB
APP[应用 SLA] --> EXP[mysqld_exporter]
EXP --> GSV[GLOBAL STATUS]
EXP --> PFS[performance_schema]
DBA[应急排查] --> STATUS[SHOW ENGINE INNODB STATUS]
PFS --> LOCKS[data_locks]
PFS --> TRX[events_transactions_*]
| 层级 | 工具 | 粒度 |
|---|---|---|
| 外显 | SHOW GLOBAL STATUS |
计数器 |
| 引擎快照 | INNODB STATUS |
瞬时结构 |
| 细粒度 | PFS | 线程/事件 |
| 时序 | Prometheus + Grafana | 趋势 |
SHOW ENGINE INNODB STATUS\G| 段落 | 关注字段 |
|---|---|
| BACKGROUND THREAD | purge lag、main thread 状态 |
| SEMAPHORES | mutex/rw-lock 等待 |
| LATEST DETECTED DEADLOCK | 最近死锁图 |
| TRANSACTIONS | trx id、锁等待、HLL |
| BUFFER POOL AND MEMORY | 命中率、脏页、young/old |
| INSERT BUFFER AND ADAPTIVE HASH INDEX | ibuf/AHI |
| LOG | LSN、log flushed、checkpoint age |
| ROW OPERATIONS | 读写行速率 |
History list length(HLL):未 purge 的 undo 量——第 17 篇 长事务核心信号。
-- 需本地验证
SELECT * FROM performance_schema.data_locks LIMIT 5;
SELECT * FROM performance_schema.data_lock_waits LIMIT 5;
SELECT * FROM performance_schema.events_transactions_current LIMIT 5;| 表 | 用途 |
|---|---|
data_locks /
data_lock_waits |
锁等待链 |
events_transactions_* |
事务阶段耗时 |
memory_summary_global_by_event_name |
InnoDB 内存 |
events_waits_summary_global_by_event_name |
mutex 热点 |
启用:performance_schema=ON(8.0
默认);部分 consumer 需 setup_consumers
打开。
| 指标族 | InnoDB 含义 |
|---|---|
mysql_global_status_innodb_buffer_pool_pages_* |
BP 健康 |
innodb_os_log_written |
redo 写入速率 |
innodb_row_lock_time |
行锁等待 |
innodb_data_pending_fsyncs |
数据文件 fsync 积压 |
与应用 p99 延迟 同屏,避免只看平均 STATUS。
定期抓取 STATUS 与 PFS 基线;故障时对比 SEMAPHORES 与 TRANSACTIONS 段差分。
| 维度 | InnoDB 监控 | PG |
|---|---|---|
| 快照文本 | SHOW ENGINE INNODB STATUS |
pg_stat_activity + views |
| 锁 | data_locks /
data_lock_waits |
pg_locks |
| 后台 | Page cleaner / purge 线程段 | pg_stat_bgwriter |
| 导出 | mysqld_exporter | postgres_exporter |
PG 第 21 篇 强调 分层视图;InnoDB 传统 STATUS 是单页快照,应用 PFS 补齐时序维度。
srv_mon_print(storage/innobase/srv/srv0mon.cc)MySQL 8.0.36 中该符号与 监控体系 相关:monitor 输出。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
mutex_monitor_enable(storage/innobase/srv/srv0mon.cc)MySQL 8.0.36 中该符号与 监控体系 相关:mutex 统计。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
trx_commit_for_mysql(storage/innobase/trx/trx0trx.cc)MySQL 8.0.36 中该符号与 监控体系 相关:InnoDB 事务提交入口。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
trx_prepare_for_mysql(storage/innobase/trx/trx0trx.cc)MySQL 8.0.36 中该符号与 监控体系 相关:InnoDB XA prepare。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
log_buffer_write(storage/innobase/log/log0log.cc)MySQL 8.0.36 中该符号与 监控体系 相关:redo 写入 log buffer。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
log_write_up_to(storage/innobase/log/log0log.cc)MySQL 8.0.36 中该符号与 监控体系 相关:redo 刷盘至指定 LSN。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
buf_page_get_gen(storage/innobase/buf/buf0buf.cc)MySQL 8.0.36 中该符号与 监控体系 相关:Buffer Pool 取页。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
lock_rec_lock(storage/innobase/lock/lock0lock.cc)MySQL 8.0.36 中该符号与 监控体系 相关:记录锁 / gap lock。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
ibuf_insert(storage/innobase/ibuf/ibuf0ibuf.cc)MySQL 8.0.36 中该符号与 监控体系 相关:Change Buffer 插入。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
ibuf_merge(storage/innobase/ibuf/ibuf0ibuf.cc)MySQL 8.0.36 中该符号与 监控体系 相关:Change Buffer 合并。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
btr_search_build_page_hash_index(storage/innobase/btr/btr0sea.cc)MySQL 8.0.36 中该符号与 监控体系 相关:AHI 构建。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
srv_mon_print_innodb_monitor(storage/innobase/srv/srv0mon.cc)MySQL 8.0.36 中该符号与 监控体系 相关:INNODB STATUS 输出。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
trx_purge(storage/innobase/trx/trx0purge.cc)MySQL 8.0.36 中该符号与 监控体系 相关:purge 回收 undo。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
recv_recovery_from_checkpoint_start(storage/innobase/log/log0recv.cc)MySQL 8.0.36 中该符号与 监控体系 相关:崩溃恢复 redo apply。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
ha_commit_trans(sql/handler.cc)MySQL 8.0.36 中该符号与 监控体系 相关:Server 层事务提交。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
ordered_commit(sql/binlog.cc)MySQL 8.0.36 中该符号与 监控体系 相关:binlog 组提交。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
MYSQL_BIN_LOG::commit(sql/binlog.cc)MySQL 8.0.36 中该符号与 监控体系 相关:binlog 事务落盘。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
ha_innobase::index_read(storage/innobase/handler/ha_innodb.cc)MySQL 8.0.36 中该符号与 监控体系 相关:索引读 handler 入口。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
ha_innobase::index_next(storage/innobase/handler/ha_innodb.cc)MySQL 8.0.36 中该符号与 监控体系 相关:索引扫描下一行。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
row_search_mvcc(storage/innobase/row/row0sel.cc)MySQL 8.0.36 中该符号与 监控体系 相关:一致性读搜索。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
btr_cur_search_to_nth_level(storage/innobase/btr/btr0cur.cc)MySQL 8.0.36 中该符号与 监控体系 相关:B+Tree 搜索。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
srv_mon_print(storage/innobase/srv/srv0mon.cc)MySQL 8.0.36 中该符号与 监控体系 相关:monitor 输出。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
mutex_monitor_enable(storage/innobase/srv/srv0mon.cc)MySQL 8.0.36 中该符号与 监控体系 相关:mutex 统计。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
trx_commit_for_mysql(storage/innobase/trx/trx0trx.cc)MySQL 8.0.36 中该符号与 监控体系 相关:InnoDB 事务提交入口。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
trx_prepare_for_mysql(storage/innobase/trx/trx0trx.cc)MySQL 8.0.36 中该符号与 监控体系 相关:InnoDB XA prepare。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
log_buffer_write(storage/innobase/log/log0log.cc)MySQL 8.0.36 中该符号与 监控体系 相关:redo 写入 log buffer。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
log_write_up_to(storage/innobase/log/log0log.cc)MySQL 8.0.36 中该符号与 监控体系 相关:redo 刷盘至指定 LSN。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
buf_page_get_gen(storage/innobase/buf/buf0buf.cc)MySQL 8.0.36 中该符号与 监控体系 相关:Buffer Pool 取页。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
lock_rec_lock(storage/innobase/lock/lock0lock.cc)MySQL 8.0.36 中该符号与 监控体系 相关:记录锁 / gap lock。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
ibuf_insert(storage/innobase/ibuf/ibuf0ibuf.cc)MySQL 8.0.36 中该符号与 监控体系 相关:Change Buffer 插入。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
ibuf_merge(storage/innobase/ibuf/ibuf0ibuf.cc)MySQL 8.0.36 中该符号与 监控体系 相关:Change Buffer 合并。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
btr_search_build_page_hash_index(storage/innobase/btr/btr0sea.cc)MySQL 8.0.36 中该符号与 监控体系 相关:AHI 构建。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
srv_mon_print_innodb_monitor(storage/innobase/srv/srv0mon.cc)MySQL 8.0.36 中该符号与 监控体系 相关:INNODB STATUS 输出。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
trx_purge(storage/innobase/trx/trx0purge.cc)MySQL 8.0.36 中该符号与 监控体系 相关:purge 回收 undo。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
recv_recovery_from_checkpoint_start(storage/innobase/log/log0recv.cc)MySQL 8.0.36 中该符号与 监控体系 相关:崩溃恢复 redo apply。
| 步骤 | 动作 |
|---|---|
| 1 | 在 tag mysql-8.0.36 下打开源文件 |
| 2 | 自函数入口向下读 80–120 行 |
| 3 | 记录 mtr / mutex 边界与调用方 |
| 4 | 对照本章流程图标注阶段 |
| 参数 | 默认 | 说明 |
|---|---|---|
16_1 |
见文档 | 参数说明 1 |
16_2 |
见文档 | 参数说明 2 |
16_3 |
见文档 | 参数说明 3 |
16_4 |
见文档 | 参数说明 4 |
16_5 |
见文档 | 参数说明 5 |
16_6 |
见文档 | 参数说明 6 |
16_7 |
见文档 | 参数说明 7 |
16_8 |
见文档 | 参数说明 8 |
16_9 |
见文档 | 参数说明 9 |
16_10 |
见文档 | 参数说明 10 |
16_11 |
见文档 | 参数说明 11 |
16_12 |
见文档 | 参数说明 12 |
16_13 |
见文档 | 参数说明 13 |
16_14 |
见文档 | 参数说明 14 |
16_15 |
见文档 | 参数说明 15 |
16_16 |
见文档 | 参数说明 16 |
16_17 |
见文档 | 参数说明 17 |
16_18 |
见文档 | 参数说明 18 |
16_19 |
见文档 | 参数说明 19 |
16_20 |
见文档 | 参数说明 20 |
16_21 |
见文档 | 参数说明 21 |
16_22 |
见文档 | 参数说明 22 |
16_23 |
见文档 | 参数说明 23 |
16_24 |
见文档 | 参数说明 24 |
16_25 |
见文档 | 参数说明 25 |
16_26 |
见文档 | 参数说明 26 |
16_27 |
见文档 | 参数说明 27 |
16_28 |
见文档 | 参数说明 28 |
16_29 |
见文档 | 参数说明 29 |
16_30 |
见文档 | 参数说明 30 |
InnoDB 的 监控体系 机制必须与
redo(log0log.cc)、undo(trx0undo.cc)、Buffer
Pool(buf0buf.cc)一并理解。连接线程持有
THD,经 ha_innobase
进入引擎;页级修改包在
mtr(mtr0mtr.cc)内。SQL
事务边界由 Server ha_commit_trans 协调 binlog
与 InnoDB(本章主线)。
短临界区用
mutex_enter(sync0sync.cc);页内容用
rw_lock(sync0rw.cc)。performance_schema
中 wait/synch/mutex/innodb/% 需在本地 workload
下采集,不可套用他方 benchmark。
建议:本章核心目录 → mtr/mtr0mtr.cc →
log/log0log.cc → Server 层
sql/binlog.cc(若涉及复制)。调试编译用
-DWITH_DEBUG=1;生产用官方 GA 构建。
凡涉及
SHOW ENGINE INNODB STATUS、Performance
Schema、data_locks 的实验均标注
需本地验证。记录版本、存储介质、并发度;性能数字至少
3 次采样取中位数。
若已读 PostgreSQL 内核系列,用「同一问题」对照机制差异;不比较绝对性能——复制模型、页大小、MVCC 方案均不同。
Cloud RDS/Aurora 内部路径可能与社区版不同;本文以社区版
storage/innobase/ 为准。MariaDB 10.x
在部分路径存在分叉——以 Release Notes 为准。
InnoDB 的 监控体系 机制必须与
redo(log0log.cc)、undo(trx0undo.cc)、Buffer
Pool(buf0buf.cc)一并理解。连接线程持有
THD,经 ha_innobase
进入引擎;页级修改包在
mtr(mtr0mtr.cc)内。SQL
事务边界由 Server ha_commit_trans 协调 binlog
与 InnoDB(本章主线)。
短临界区用
mutex_enter(sync0sync.cc);页内容用
rw_lock(sync0rw.cc)。performance_schema
中 wait/synch/mutex/innodb/% 需在本地 workload
下采集,不可套用他方 benchmark。
建议:本章核心目录 → mtr/mtr0mtr.cc →
log/log0log.cc → Server 层
sql/binlog.cc(若涉及复制)。调试编译用
-DWITH_DEBUG=1;生产用官方 GA 构建。
凡涉及
SHOW ENGINE INNODB STATUS、Performance
Schema、data_locks 的实验均标注
需本地验证。记录版本、存储介质、并发度;性能数字至少
3 次采样取中位数。
若已读 PostgreSQL 内核系列,用「同一问题」对照机制差异;不比较绝对性能——复制模型、页大小、MVCC 方案均不同。
Cloud RDS/Aurora 内部路径可能与社区版不同;本文以社区版
storage/innobase/ 为准。MariaDB 10.x
在部分路径存在分叉——以 Release Notes 为准。
InnoDB 的 监控体系 机制必须与
redo(log0log.cc)、undo(trx0undo.cc)、Buffer
Pool(buf0buf.cc)一并理解。连接线程持有
THD,经 ha_innobase
进入引擎;页级修改包在
mtr(mtr0mtr.cc)内。SQL
事务边界由 Server ha_commit_trans 协调 binlog
与 InnoDB(本章主线)。
短临界区用
mutex_enter(sync0sync.cc);页内容用
rw_lock(sync0rw.cc)。performance_schema
中 wait/synch/mutex/innodb/% 需在本地 workload
下采集,不可套用他方 benchmark。
建议:本章核心目录 → mtr/mtr0mtr.cc →
log/log0log.cc → Server 层
sql/binlog.cc(若涉及复制)。调试编译用
-DWITH_DEBUG=1;生产用官方 GA 构建。
凡涉及
SHOW ENGINE INNODB STATUS、Performance
Schema、data_locks 的实验均标注
需本地验证。记录版本、存储介质、并发度;性能数字至少
3 次采样取中位数。
若已读 PostgreSQL 内核系列,用「同一问题」对照机制差异;不比较绝对性能——复制模型、页大小、MVCC 方案均不同。
Cloud RDS/Aurora 内部路径可能与社区版不同;本文以社区版
storage/innobase/ 为准。MariaDB 10.x
在部分路径存在分叉——以 Release Notes 为准。
InnoDB 的 监控体系 机制必须与
redo(log0log.cc)、undo(trx0undo.cc)、Buffer
Pool(buf0buf.cc)一并理解。连接线程持有
THD,经 ha_innobase
进入引擎;页级修改包在
mtr(mtr0mtr.cc)内。SQL
事务边界由 Server ha_commit_trans 协调 binlog
与 InnoDB(本章主线)。
短临界区用
mutex_enter(sync0sync.cc);页内容用
rw_lock(sync0rw.cc)。performance_schema
中 wait/synch/mutex/innodb/% 需在本地 workload
下采集,不可套用他方 benchmark。
建议:本章核心目录 → mtr/mtr0mtr.cc →
log/log0log.cc → Server 层
sql/binlog.cc(若涉及复制)。调试编译用
-DWITH_DEBUG=1;生产用官方 GA 构建。
凡涉及
SHOW ENGINE INNODB STATUS、Performance
Schema、data_locks 的实验均标注
需本地验证。记录版本、存储介质、并发度;性能数字至少
3 次采样取中位数。
若已读 PostgreSQL 内核系列,用「同一问题」对照机制差异;不比较绝对性能——复制模型、页大小、MVCC 方案均不同。
Cloud RDS/Aurora 内部路径可能与社区版不同;本文以社区版
storage/innobase/ 为准。MariaDB 10.x
在部分路径存在分叉——以 Release Notes 为准。
InnoDB 的 监控体系 机制必须与
redo(log0log.cc)、undo(trx0undo.cc)、Buffer
Pool(buf0buf.cc)一并理解。连接线程持有
THD,经 ha_innobase
进入引擎;页级修改包在
mtr(mtr0mtr.cc)内。SQL
事务边界由 Server ha_commit_trans 协调 binlog
与 InnoDB(本章主线)。
短临界区用
mutex_enter(sync0sync.cc);页内容用
rw_lock(sync0rw.cc)。performance_schema
中 wait/synch/mutex/innodb/% 需在本地 workload
下采集,不可套用他方 benchmark。
建议:本章核心目录 → mtr/mtr0mtr.cc →
log/log0log.cc → Server 层
sql/binlog.cc(若涉及复制)。调试编译用
-DWITH_DEBUG=1;生产用官方 GA 构建。
凡涉及
SHOW ENGINE INNODB STATUS、Performance
Schema、data_locks 的实验均标注
需本地验证。记录版本、存储介质、并发度;性能数字至少
3 次采样取中位数。
若已读 PostgreSQL 内核系列,用「同一问题」对照机制差异;不比较绝对性能——复制模型、页大小、MVCC 方案均不同。
Cloud RDS/Aurora 内部路径可能与社区版不同;本文以社区版
storage/innobase/ 为准。MariaDB 10.x
在部分路径存在分叉——以 Release Notes 为准。
InnoDB 的 监控体系 机制必须与
redo(log0log.cc)、undo(trx0undo.cc)、Buffer
Pool(buf0buf.cc)一并理解。连接线程持有
THD,经 ha_innobase
进入引擎;页级修改包在
mtr(mtr0mtr.cc)内。SQL
事务边界由 Server ha_commit_trans 协调 binlog
与 InnoDB(本章主线)。
短临界区用
mutex_enter(sync0sync.cc);页内容用
rw_lock(sync0rw.cc)。performance_schema
中 wait/synch/mutex/innodb/% 需在本地 workload
下采集,不可套用他方 benchmark。
建议:本章核心目录 → mtr/mtr0mtr.cc →
log/log0log.cc → Server 层
sql/binlog.cc(若涉及复制)。调试编译用
-DWITH_DEBUG=1;生产用官方 GA 构建。
凡涉及
SHOW ENGINE INNODB STATUS、Performance
Schema、data_locks 的实验均标注
需本地验证。记录版本、存储介质、并发度;性能数字至少
3 次采样取中位数。
若已读 PostgreSQL 内核系列,用「同一问题」对照机制差异;不比较绝对性能——复制模型、页大小、MVCC 方案均不同。
Cloud RDS/Aurora 内部路径可能与社区版不同;本文以社区版
storage/innobase/ 为准。MariaDB 10.x
在部分路径存在分叉——以 Release Notes 为准。
下一篇:经典故障模式
storage/innobase/ — 引擎实现sql/binlog.cc, sql/handler.cc
— Server 层交界把当前热点继续串成多页阅读,而不是停在单篇消费。
2026-06-18 · database / kernel
InnoDB handler 边界、Master/Purge/IO/Page Cleaner 线程、内存布局与 srv0srv.cc 启动路径。
2026-06-18 · database / kernel
FIL 页头、Infimum/Supremum、聚簇/二级索引、ROW_FORMAT 与 rem0rec.h 行头字段。
2026-06-18 · database / kernel
Buffer Pool 实例、LRU 年轻/年老分区、flush 列表、buf_page_get 路径与 read-ahead。
2026-06-18 · database / kernel
Redo log buffer、LSN、checkpoint、mtr 记录类型与 innodb_flush_log_at_trx_commit 语义。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。