首頁  >  文章  >  資料庫  >  如何識別MySQL中哪個事務導致「等待表元資料鎖」狀態?

如何識別MySQL中哪個事務導致「等待表元資料鎖」狀態?

Patricia Arquette
Patricia Arquette原創
2024-10-31 02:12:30126瀏覽

How to Identify Which Transaction is Causing the “Waiting for Table Metadata Lock” State in MySQL?

識別導致「等待表元資料鎖定」狀態的交易

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn