概述
有时候会遇到数据库死锁问题,报错锁等待超时:Lock wait timeout exceeded
解决
查看锁情况
查询锁
-- mysql 8.0
-- 查看当前锁
select * from performance_schema.data_locks;
-- 锁关系
select * from performance_schema.data_lock_waits;
-- mysql 6
select * from information_schema.innodb_locks;
select * from information_schema.innodb_lock_waits;
查看当前事务
select * from information_schema.innodb_trx;
查询正在进行的进程
show processlist;
定位锁对应进程
当processlist有info信息的时候还是非常好定位的,如果没有都是null的时候:可以通过死锁的事务id定位事务表的事务,明确事务开始时间,然后当前时间减去事务开始时间计算执行秒数
杀死进程,解锁
kill 进程号;
kill之后再去查死锁。
参考资料:
https://blog.csdn.net/mr_zhu_wenxing/article/details/127742187