MySQL 查看是否有被锁定的事物线程

问题描述:
删除部分数据,在删除的时候出现报错:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction。

解决方案:
去查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程,

看看ID是否在show full processlist里面的sleep线程中,

如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。
————————————————
版权声明:本文为CSDN博主「黄佳俊、」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_48419914/article/details/122151779

网上一通查询,解决方式如下:

1、先查看数据库的事务隔离级别:

select @@tx_isoloation;

REPEATABLE-READ // MySQL默认的事务隔离级别就是REPEATABLE-READ

2、然后查看当前数据库的线程情况:

SHOW FULL PROCESSLIST;

没有看到正在执行的很慢SQL记录线程,再去查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程,看看ID是否在show full processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。

SELECT * FROM information_schema.INNODB_TRX;

3、发现有id为616694的sql,需要手动kill掉

KILL 616694;

kill之后,再去执行上面的delete语句,就可以执行成功了。

注意:MySQL是自动提交事务的(即:autocommit=1),可以使用 show variables like 'autocommit' 或者 select @@autocommit 查看当前数据库是否为自动提交事务;若autocommit的值不是1还可以使用set global autocommit = 1 将自动提交设置为开启。

posted @ 2022-08-31 14:33  雪之谷  阅读(678)  评论(0编辑  收藏  举报