定位导致“等待表元数据锁”状态的事务
在MySQL中,遇到“等待表元数据锁”消息DDL 操作表示另一个事务持有的锁。要确定罪魁祸首交易,请考虑以下方法:
MySQL 版本 5.7.3
-
SHOW ENGINE INNODB STATUS G:
此命令显示“TRANSACTIONS”部分,列出未完成的事务。
INFORMATION_SCHEMA表
-
SELECT * FROM INNODB_LOCK_WAITS:
检索有关所有锁等待的信息。-
SELECT * FROM INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID从INNODB_LOCK_WAITS):
标识阻塞事务。-
SELECT * FROM INNODB_LOCKS INNER 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中文网其他相关文章!