调查“Waiting for Table Metadata Lock”的来源
在MySQL中,在DDL时遇到“Waiting for table Metadata Lock”消息查询可能会令人沮丧。此状态通常表明另一个事务正在受影响的表上持有锁,从而阻止当前事务继续进行。
识别罪魁祸首事务
查明哪个事务是负责此保留,请考虑使用以下方法:
1。 MySQL v5.5.24 及以下
对于 5.7.3 之前的 MySQL 版本,执行以下命令:
SHOW ENGINE INNODB STATUS \G
检查“TRANSACTIONS”部分以识别有问题的事务。
2。信息模式表
所有等待锁:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
阻塞事务:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS);
特定表上的锁定:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS WHERE LOCK_TABLE = db_name.table_name;
等待锁定的事务:
SELECT TRX_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY FROM INFORMATION_SCHEMA.INNODB_TRX WHERE TRX_STATE = 'LOCK WAIT';
其他参考:
有关解决此问题的综合指南,请参阅“MySQL 故障排除:查询不起作用时该怎么办”,第 6 章,第 96 页。
以上是如何识别MySQL中导致“等待表元数据锁”的罪魁祸首事务?的详细内容。更多信息请关注PHP中文网其他相关文章!