当前位置:首页 > 问答 > 正文

数据库 死锁处理 MySQL 遇到死锁时的应对方法

数据库 | 死锁处理 | MySQL 遇到死锁时的应对方法
**

数据库 死锁处理 MySQL 遇到死锁时的应对方法

  1. 死锁检测:InnoDB 默认启用死锁检测,通过等待图(wait-for graph)算法识别循环依赖。
  2. 自动回滚:MySQL 会强制回滚代价最小的事务(通常影响行数少的事务),释放锁资源。
  3. 事务重试:捕获死锁异常(如 ERROR 1213)后,应用程序应实现重试机制。
  4. 锁超时设置:调整 innodb_lock_wait_timeout(默认50秒),避免长时间阻塞。
  5. 优化事务
    • 缩短事务执行时间;
    • 按固定顺序访问表和行;
    • 减少事务隔离级别(如从 REPEATABLE READ 降级为 READ COMMITTED)。
  6. 监控工具
    • 使用 SHOW ENGINE INNODB STATUS 查看最近死锁日志;
    • 开启 innodb_print_all_deadlocks 记录所有死锁到错误日志。
  7. 索引优化:合理设计索引,减少全表扫描导致的锁竞争。

(注:基于2025-08前的技术文档及MySQL官方手册整理。)

数据库 死锁处理 MySQL 遇到死锁时的应对方法

发表评论