Lock wait timeout exceeded; try resarting tansaction

一,最近项目中Lock wait timeout exceeded; try resarting tansaction这个bug动不动就出现,把我弄得精疲力尽,网上说是事务问题,可我们这个service中并没有开启事务。

  一番排查后,可能是某个service开启事务,其他线程进来竞争资源,导致等待超时异常。

二,回到最原始的问题,如何解决等待超时

  1,start transaction;开启一个事务

  2,输入update语句,不要提交也不要回滚

  3,新窗口中再次开启事务,并操作(查询,修改都可),等待一段时间(innodb_lock_wait_timeout文件配置时间)

  即可发现报错:Lock wait timeout exceeded; try resarting tansaction

  4,此时输入SQL:

SELECT * FROM information_schema.INNODB_TRX;

select * from information_schema.innodb_lock_waits;
select * from information_schema.innodb_locks;

  输出信息如下

  发现多个事务等待释放

三,解决方法

  1,查看项目中代码,避免无原因开启事务,或者事务范围过大

  2,网上说的kill线程,其实不太靠谱,我是通过sql:update语句解决该问题的,貌似可以释放所有事务,本人查了很多资料,没太弄明白,如果有人知道原因,在下愿闻其详!

posted @ 2019-01-22 15:47  superChong  阅读(235)  评论(0编辑  收藏  举报