碰到一个线上问题,在此记录下
现象:
测试人员发现在做一个操作时报如下异常:
Lock wait timeout exceeded; try restarting transaction
解决办法
执行以下sql:
SELECT * FROM information_schema.INNODB_TRX;
SELECT * FROM information_schema.INNODB_LOCKS;
SELECT * FROM information_schema.INNODB_LOCK_WAITS;
结果:
查看 INNODB_TRX 中 LOCK WAIT 状态 的记录
查看 INNODB_LOCKS 中 当前记录,发现有两条 加锁
查看 INNODB_LOCK_WAITS 中 当前锁依赖信息,发现在等待168774808 这个事务的1107539082 这个线程,
也就是上面红框锁记录。
当前这个线程在INNODB_TRX表中可以查看到
将此线程kill掉就可以了
kill 1107539082;
但关键是没有找到这个线程为什么加锁,并没有释放的原因。