我试图在表上执行一些DDL,并SHOW PROCESSLIST
导致出现“正在等待表元数据锁定”消息。
我如何找出尚未关闭的交易?
我正在使用MySQL v5.5.24。
SHOW ENGINE INNODB STATUS \G
寻找部分-
TRANSACTIONS
我们可以使用INFORMATION_SCHEMA表。
有用的查询
要检查所有锁事务正在等待:
USE INFORMATION_SCHEMA;
SELECT * FROM INNODB_LOCK_WAITS;
阻止交易的列表:
SELECT *
FROM INNODB_LOCKS
WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);
要么
SELECT INNODB_LOCKS.*
FROM INNODB_LOCKS
JOIN INNODB_LOCK_WAITS
ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);
特定表上的锁列表:
SELECT * FROM INNODB_LOCKS
WHERE LOCK_TABLE = db_name.table_name;
等待锁的事务列表:
SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
FROM INNODB_TRX
WHERE TRX_STATE = 'LOCK WAIT';
参考- MySQL的故障排除:怎么办时,查询不工作,第6章-第96页。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句