Innodb如何排查锁

今天在执行update语句时发现当前会话事务提交失败,事务获取锁超时,报错Lock wait timeout exceeded; try restarting transaction,初步判断有别的会话占领锁未释放,可能是别的会话获取到了锁一致未提交,大事务或者未进行commit。这里介绍几个表。本篇主要记录,参考文章https://cloud.tencent.com/developer/article/1356959。

快速解决问题

1
SELECT ID FROM information_schema.INNODB_TRX left join information_schema.processlist on trx_mysql_thread_id=ID ;
  • select * from information_schema.INNODB_TRX查询到所有的当前在执行的事务信息,拿到事务执行很长的线程ID。
  • select * from information_schema.processlist查询到所有当前的执行线程的状态,如果上面拿到的线程处于sleep状态,直接杀掉。
  • kill ID,执行杀死线程的行为。

###