背景
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
即是对应的线程 ID -
PROCESSLIST 表
select * from information_schema.`PROCESSLIST` where ID = "xxx"
能够查到线程的详细信息,能够通过
kill xxx
来终止过程从而强行开释锁