識別導致「等待表元資料鎖定」狀態的交易
在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中文網其他相關文章!