ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction的问题解决(备忘)

今天让运维将测试库的数据到了导出一份到自己电脑本地来做测试,数据量较大(几百万条吧),系统运行起来之后查看订单列表数据很慢(估计是自己电脑配置太low了,刷新列表的时候一直在加载),然后就想删除部分数据,在删除的时候出现报错:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction。(把这个问题记录下来,防止以后再次遇到了方便处理)。


DELETE FROM t_loan_apply WHERE DATE(addtime) < '2017-06-01';


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

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 将自动提交设置为开启。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值