MySQL 中如果发生死锁应该如何解决?
自动检测与回滚
MySQL自带死锁检测机制(innodb_deadlock_detect),当检测到死锁时,数据库会自动回滚其中一个事务,以解除死锁;通常会回滚事务中持有资源最少的那个。
MySQL也有锁超时的相关参数(innodb_lock_wait_timeout),当获取锁的等待时间超过阈值,就会释放锁进行回滚。
手动kill发生死锁的线程
通过命令,手动快速找出被阻塞的事务及其线程id,手动kill,及时释放资源。
查找当前的事务和锁信息
SHOW ENGINE INNODB STATUS;
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;手动终止事务
KILL <thread_id>;
#MySQL(21)
评论