辨識導致「等待表元資料鎖定」狀態的交易
嘗試在表上執行DDL 操作時,可能會遇到SHOW PROCESSLIST 中顯示「正在等待表元資料鎖定」訊息。這表明另一個事務仍在引用該表,從而防止其元資料被更改。
辨識交易
5.7.3 之前的MySQL 版本:
找到「TRANSACTIONS」部分。
利用INFORMATION_SCHEMA:
利用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 * 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';
辨識等待鎖定的交易:
... REQUESTING TRXs: trx id 10,mysql thread id 1161142,query SELECT ... trx id 16,mysql thread id 1161141,query SELECT ... ...範例輸出:INNODB_類似以下內容的輸出:這表示事務ID 10 和16 正在等待鎖定。可以使用提供的其他查詢進行進一步分析,以識別阻塞事務和被鎖定的特定表。
以上是如何識別MySQL中導致「等待表元資料鎖」的事務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!