辨識導致「等待表元資料鎖定」狀態的交易
嘗試在表上執行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 ... ...
以上是如何識別MySQL中導致「等待表元資料鎖」的事務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!