Lock wait timeout exceeded; try restarting transaction

Lock wait timeout exceeded; try restarting transaction

1、lock wait != deadlocck

lock wait 实际上只是事务等待处理的时间超时了,而并非死锁,与deadlock是由区别的。

当出现这个报错的时候,实际是在之前的某个任务就已经把资源占用了,而且还占着并释放,导致后面的事务请求不到资源。并非相互等待资源。

只需要找到埋坑的事务就可以了,而这个坑往往是程序处理不当导致的,比如程序异常了,忘记写事务commit 或者 rollbck了。

 

2、以下记录今天找坑的过程

查information_schema.INNODB_TRX. 发现有一条记录执行时间很长了,还处于running状态。

查innodb_lock,innodb_lock_waits,都没有异常数据

确定是某个事务一直处于处理状态,没有提交。

通过查代码情况,发现是旁边小伙伴改代码的时候,改出了一个bug,整个函数异常退出了,并且没有捕获到异常,导致事务没有执行commit ,也没有rollback.

将对应的事务任务杀掉,资源被占用的情况就好了

 

 

你可能感兴趣的:(数据库,mysql,Lock,wait)