CS-Notes 学习笔记
Java 后端 · MySQL

遇到过 MySQL 死锁吗?怎样排查?

先自己想一想,再看参考要点

参考要点

  • 常见原因:两个事务按相反的顺序更新同一组行,或者“先查有没有,没有再插入”时拿到了同一个间隙锁,插入意向锁与对方的间隙锁冲突
  • InnoDB 检测到死锁后回滚其中一个事务,应用要重试
  • 排查:看 SHOW ENGINE INNODB STATUS 的 LATEST DETECTED DEADLOCK,打开 innodb_print_all_deadlocks 记录每次死锁,锁等待时查 performance_schema.data_locks 和 data_lock_waits
  • 避免:按相同顺序访问行、缩短事务、给条件列建索引、靠唯一索引判重
在学习站中自测这道题看这道题所在的一天

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。