SQL死锁日志怎么看_定位冲突SQL实战技巧【技巧】

admin 百科 13
死锁日志需重点分析两个事务块,通过TRANSACTION ID、ACTIVE时间、HOLDS/WAITING锁及末尾SQL定位冲突环路与业务缺陷,并用SHOW ENGINE INNODB STATUS、innodb_print_all_deadlocks或information_schema表主动捕获。

SQL死锁日志怎么看_定位冲突SQL实战技巧【技巧】-第1张图片-佛山资讯网

死锁日志里找关键事务对

死锁日志本质是两个(或多个)事务互相卡住的“快照”,重点看带 *** (1) TRANSACTION*** (2) TRANSACTION 的两段。它们构成一个闭环:A等B的锁,B又等A的锁。

注意每段开头的 TRANSACTION ID(如 TRANSACTION 10047),这是唯一标识;再看 ACTIVE X sec,时间越短的通常是后发起、被回滚的那个(MySQL默认回滚代价小的事务)。

锁定资源和等待关系要对照着读

每个事务块里有三类关键行:

  • HOLDS THE LOCK(S):它现在攥着什么锁(比如 RECORD LOCKS space id 44 page no 3 index PRIMARY
  • WAITING FOR THIS LOCK:它正伸手要哪个锁(比如 lock_mode X locks rec but not gap waiting
  • query id xxx ... updating / deleting ...:最后执行的那条SQL,就是冲突源头

把事务1的 WAITING 和事务2的 HOLDS 对上,事务2的 WAITING 和事务1的 HOLDS 对上,就串出了死锁环路。例如:

标签: mysql ai sql语句

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~