調查“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中文網其他相關文章!