Mysql 杀死进程 | 解决Lock wait timeout exceeded
前言:2022年11月8日晚上11点左右一个小老弟问我Lock wait timeout exceeded怎么解决,这个小老弟项目明天给领导审查,所以引出了这一篇文章,随意记录。
查询事务语句(mysql8.0)
select * from information_schema.innodb_trx\G;
查询事务死锁语句(mysql8.0)
select * from performance_schema.data_locks\G;
查询正在进行的进程
show processlist;
【重点】当info为null定位哪个进程为死锁进程
当processlist有info信息的时候还是非常好定位的,如果没有都是null的时候:通过死锁的事务id定位事务表的事务,明确事务开始时间
然后当前时间减去事务开始时间计算执行秒数
杀死进程语句:
kill 9668;
kill之后再去查死锁,已经没有了。
最后
- 查询事务和查询死锁的语句可以通过事务ID联合查询,加快排查速度;
- show processlist也有专门的一张表,可以过滤状态和时长,方便排查;
- Command为Sleep的时间超50(默认死锁时间是50秒)的进程,基本上都可以随意杀;
1和2的语句我没有测试,我就不写上来了,理论上是OK的。