土法炼钢 · 系统与基础设施

【MySQL InnoDB 内核】性能调查:EXPLAIN ANALYZE 到 OS 层

文章导航

分类入口
databasekernel
标签入口
#mysql#innodb#performance#explain-analyze#perf-investigation

目录

性能调查:EXPLAIN ANALYZE 到 OS 层

慢查询日志只给 已完成 语句的墙钟时间,无法区分 等锁 还是 等 IO。MySQL 8.0.18+ 的 EXPLAIN ANALYZE 在计划节点上挂 actual timeperformance_schemamutex、IO、锁 拆到事件。若两者显示 CPU 低、延迟高,应下沉 iostat/perf 看是不是磁盘或 fsync 队列。

方法论对照 PG 第 23 篇PG 监控篇


一、调查分层

flowchart TD
  Q[延迟/吞吐异常] --> EA[EXPLAIN ANALYZE]
  EA --> PFS[performance_schema waits]
  PFS --> INN[INNODB STATUS 段]
  INN --> OS[iostat / perf]

二、EXPLAIN ANALYZE

-- 需本地验证
EXPLAIN ANALYZE SELECT ...;

关注:actual time回表 还是 索引范围rows 估计偏差大时更新统计信息 ANALYZE TABLE


三、等锁调查

SELECT r.trx_id waiting, b.trx_id blocking
FROM performance_schema.data_lock_waits w
JOIN information_schema.innodb_trx r ON ...
-- 完整 JOIN 需本地根据列名调整

对照 第 9 篇


四、等 IO 调查

信号 含义
Innodb_data_pending_writes 数据写积压
innodb_os_log_written 速率 redo 压力
PFS wait/io/file/innodb/% 文件 IO 等待

OS 层:iostat -x%utilawait


五、CPU 与 mutex

PFS 汇总 events_waits_summary_global_by_event_name 过滤 mutex/innodb——对照 第 1 篇 线程模型。


六、关键要点

  1. 先计划后等待再 IO,避免直接调参。
  2. EXPLAIN ANALYZE 需 8.0.18+。
  3. PFS 与 STATUS 交叉验证。
  4. OS 层验证 fsync 饱和第 12 篇 组提交。

十、PG 对照

步骤 MySQL PG
计划 EXPLAIN ANALYZE EXPLAIN ANALYZE
等待 PFS events pg_stat_activity.wait_event
IO InnoDB STATUS / PFS pg_stat_io
内核 perf + 符号 perf + pg_stat

分层思路一致:计划 → 等待事件 → 存储 → OS


上一篇经典故障模式

下一篇主从切换与数据恢复

参考资料

源码(MySQL 8.0.36)

官方文档

相关文章

读完这篇,下一步读什么

优先读同系列或同问题的下一篇,把单篇消费变成主题集群。


By .