← ClaudeAtlas

diag-mysql-deadlocklisted

MySQL 死锁全链诊断。捕获 InnoDB 死锁状态,解析锁链(谁持有什么、谁等待什么), 分类死锁模式(AB-BA / Gap Lock / FK cascade / Auto-Inc),查找当前锁等待和长事务, 输出结构化报告并给出修复建议。支持 MySQL 5.7+ performance_schema 与 5.6 兼容回退。
seed-forge/harness-ai-kit · ★ 22 · API & Backend · score 74
Install: claude install-skill seed-forge/harness-ai-kit
# MySQL Deadlock Full-Chain Diagnostics ## 用途 当用户报告 MySQL 死锁或怀疑锁竞争时触发。覆盖: - 应用日志出现 `Error: 1213 Deadlock found` - 监控发现 `Innodb_deadlocks` 计数器持续增长 - 高峰期锁竞争排查 - Schema 变更后可能影响锁行为 本技能是**自包含诊断 Runbook**——所有 SQL、模式分类、输出模板、告警阈值都在本文件内,不依赖外部 references。 ## 输入 - MySQL 连接信息(host / port / user / password) - 可选:应用日志中的死锁片段 - 可选:已知的表结构和索引信息 ## 输出 - 结构化死锁分析报告(填充输出模板) - 根因判定 + 修复建议(SQL / 代码 / 配置三级) ## 前置条件 | 项 | 要求 | |----|------| | MySQL 权限 | `PROCESS`(查看线程�� InnoDB 状态) | | 版本 | MySQL 5.6+(5.7+ 使用 performance_schema,5.6 回退 information_schema) | ## 诊断步骤 ### Step 1: 捕获死锁计数与最近状态 ```sql -- 死锁计数与锁等待指标 SHOW GLOBAL STATUS LIKE 'Innodb_deadlocks'; SHOW GLOBAL STATUS LIKE 'Innodb_row_lock_waits'; SHOW GLOBAL STATUS LIKE 'Innodb_row_lock_time_avg'; -- 完整 InnoDB 状态(包含 LATEST DETECTED DEADLOCK 区块) SHOW ENGINE INNODB STATUS; ``` ### Step 2: 检查当前锁等待(MySQL 5.7+) ```sql -- 谁阻塞了谁 SELECT waiting_trx.trx_id AS waiting_trx, blocking_trx.trx_id AS blocking_trx, waiting_trx.trx_state AS wait_state, waiting_trx.trx_started AS wait_started, LEFT(waiting_trx.trx_query, 200) AS wait_query, LEFT(blocking_trx.trx_query, 200) AS block_query FROM performance_schema.data_lock_waits w JOIN information_schema.innodb_trx waiting_trx ON w.requesting_engine_transaction_id = waiting_trx.trx_id JOIN information_schema.innodb_trx blocking_trx ON w.blocking_engine_transaction_id = blocking_trx.trx_id; -- MySQL 5.6 回退: SELECT * FROM information_schema.innodb_trx ORDER BY trx_started; ``` ### Step 3: 查