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.
将对应的事务任务杀掉,资源被占用的情况就好了