识别导致“等待表元数据锁定”状态的事务
尝试在表上执行 DDL 操作时,可能会遇到SHOW PROCESSLIST 中显示“正在等待表元数据锁定”消息。这表明另一个事务仍在引用该表,从而防止其元数据被更改。
识别事务
5.7.3 之前的 MySQL 版本:
对于 MySQL 版本 5.7 .3 及更高版本:
识别所有等待锁定事务:
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 * 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';
示例输出:
INNODB_LOCK_WAITS 查询可能提供类似于以下内容的输出:
... REQUESTING TRXs: trx id 10,mysql thread id 1161142,query SELECT ... trx id 16,mysql thread id 1161141,query SELECT ... ...
这表明事务 ID 10 和 16 正在等待锁定。可以使用提供的其他查询进行进一步分析,以识别阻塞事务和被锁定的特定表。
以上是如何识别MySQL中导致“等待表元数据锁”的事务?的详细内容。更多信息请关注PHP中文网其他相关文章!