识别导致“等待表元数据锁定”状态的事务
在 MySQL 版本 5.5.24 中尝试对表进行 DDL 操作但遇到“等待表元数据锁定”消息,确定负责此锁定的事务变得至关重要。
解决方案
适用于 5.7.3 以下的 MySQL 版本:
执行以下命令以检索有关状态的详细信息:
SHOW ENGINE INNODB STATUS \G
找到“TRANSACTIONS”部分并识别尚未关闭的开放交易。
对于所有 MySQL 版本:
从 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 页以获取更多见解.
以上是如何识别MySQL中哪个事务导致“等待表元数据锁”状态?的详细内容。更多信息请关注PHP中文网其他相关文章!