监控体系:INNODB STATUS 与 Performance Schema
告警只盯 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 | 趋势 |
二、INNODB STATUS 精读段落
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 篇 长事务核心信号。
三、Performance Schema 关键表
-- 需本地验证
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
打开。
四、mysqld_exporter 指标映射
| 指标族 | 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 STATUS 适合应急快照;PFS 适合关联线程。
- HLL 是 purge 滞后的一号信号。
- 死锁段 只保留最近一次——需持续采集若要做趋势。
- exporter 指标需与 STATUS 交叉验证口径。
十、PG 对照
| 维度 | 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 补齐时序维度。
下一篇:经典故障模式
参考资料
源码(MySQL 8.0.36)
storage/innobase/— 引擎实现sql/binlog.cc,sql/handler.cc— Server 层交界
官方文档
- MySQL 8.0 Reference Manual, InnoDB / Replication / Backup
相关文章
读完这篇,下一步读什么
优先读同系列或同问题的下一篇,把单篇消费变成主题集群。
【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。
【MySQL InnoDB 内核】Redo Log 内部机制:LSN、mtr 与组提交
Redo log buffer、LSN、checkpoint、mtr 记录类型与 innodb_flush_log_at_trx_commit 语义。