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

【MySQL InnoDB 内核】经典故障模式:长事务、脏页、死锁与复制延迟

文章导航

分类入口
databasekernel
标签入口
#mysql#innodb#troubleshooting#purge#flush-list#deadlock#replication-lag

目录

经典故障模式:长事务、脏页、死锁与复制延迟

凌晨告警「数据库卡顿」,白天查 slow_query 却只有毫秒级 SELECT——常见真相是 purge 追不上长事务留下的 undo,或 脏页比例触顶 checkpoint IO 风暴。另一类是业务「正常更新」在 RR 下触发 gap lock 死锁链。本文把四类高频故障钉到 第 3–13 篇 机制,给出 可执行排查 SQL(需本地验证)。


一、故障模式全景

flowchart TD
  SYM[业务症状] --> U[undo 膨胀 / HLL]
  SYM --> F[脏页 flush 风暴]
  SYM --> G[gap lock 死锁]
  SYM --> R[主从延迟]
  U --> P1[purge 滞后]
  F --> P2[checkpoint IO]
  G --> P3[RR 当前读]
  R --> P4[SQL 线程 / 大事务]

二、长事务 + undo 膨胀

现象:空间涨、查询变慢、History list length 高。

机制第 5 篇 purge 不能清理仍被 Read View 需要的 undo。

-- 需本地验证
SELECT trx_id, trx_started, trx_rows_locked, trx_mysql_thread_id
FROM information_schema.innodb_trx
ORDER BY trx_started;

SHOW ENGINE INNODB STATUS\G
-- TRANSACTIONS 段 HLL

修复边界:杀会话可回滚大事务(瞬时 IO 峰值);无法加速已堆积 undo 的回收,只能等 purge。预防:事务超时、idle_in_transaction_session_timeout


二、脏页堆积 + flush 跟不上

现象Innodb_buffer_pool_pages_dirty 高、pending flushes、checkpoint age 大。

机制第 3 篇 flush 列表与 redo 耦合。

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_%';
SHOW GLOBAL STATUS LIKE 'Innodb_data_pending%';

修复:降写入峰值、调 innodb_io_capacity(需结合磁盘能力本地验证)、避免同时大扫描+高写入。不是无限调大 BP。


三、Gap lock 死锁链

现象LATEST DETECTED DEADLOCK 出现 lock_mode X locks gap before rec

机制第 8–9 篇 RR + 当前读。

SELECT * FROM performance_schema.data_lock_waits\G

修复:改 RC(若业务允许)、对齐访问顺序、索引减少间隙、拆分批量更新。


四、主从延迟

现象:从库数据陈旧、relay 积压。

机制第 13 篇 单线程回放 / 大事务。

SHOW REPLICA STATUS\G

修复:MTS、拆大事务、从库硬件对齐、避免从库跑重分析。


五、故障对照表

故障 首选信号 内核章
undo 膨胀 HLL 5、7
flush 风暴 dirty pages 3、4
gap 死锁 deadlock 段 8、9
复制延迟 relay 空间 12、13

六、关键要点

  1. 长事务 是 undo/purge 问题之母。
  2. 脏页 与 redo checkpoint 联动,非单调 BP。
  3. gap lock 死锁要动隔离级别或 SQL 形态。
  4. 复制 延迟先看 relay 与 worker,不信 SBM。

十、PG 对照

故障 InnoDB PG
版本膨胀 undo HLL 涨 xid wrap / 长事务阻 VACUUM
写放大卡顿 flush list + redo checkpoint + bgwriter
死锁 gap lock 链 行锁 / predicate lock(SSI)
复制落后 SQL 线程 replay lag

对照 PG VACUUM 与 InnoDB purge:都是 垃圾回收跟不上生产速度


上一篇监控体系

下一篇性能调查方法论

参考资料

源码(MySQL 8.0.36)

官方文档

相关文章

读完这篇,下一步读什么

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


By .