背景
mysql 出现 ERROR 1205: Lock wait timeout exceeded
说明有另外一个事务锁定了记录,该如何排查是哪个事务呢?
过程
INNODB_LOCK_WAITS 表
再次执行SQL,让其试图获取锁。SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
可以看出本次SQL的锁等待信息,拿到
blocking_lock_id
,即是当前正在占用的lock_id
,blocking_trx_id
即是对应的事务INNODB_LOCK 表
SELECT * FROM information_schema.INNODB_LOCK;
可以查出详细的锁信息
INNODB_TRX 表
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX where trx_id = "xxx";
可以查出详细的事务信息,
trx_mysql_thread_id
即是对应的线程IDPROCESSLIST 表
select * from information_schema.`PROCESSLIST` where ID = "xxx"
可以查到线程的详细信息,可以通过
kill xxx
来终止进程从而强行释放锁
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。