MySQL 中如果发生死锁应该如何解决?

三月 18, 2025 / 十六 / 2阅读 / 0评论/ 分类: 数据库

自动检测与回滚

MySQL自带死锁检测机制(innodb_deadlock_detect),当检测到死锁时,数据库会自动回滚其中一个事务,以解除死锁;通常会回滚事务中持有资源最少的那个。

MySQL也有锁超时的相关参数(innodb_lock_wait_timeout),当获取锁的等待时间超过阈值,就会释放锁进行回滚。

手动kill发生死锁的线程

通过命令,手动快速找出被阻塞的事务及其线程id,手动kill,及时释放资源。

  1. 查找当前的事务和锁信息

SHOW ENGINE INNODB STATUS;

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
  1. 手动终止事务

KILL <thread_id>;

#MySQL(21)

评论