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

Patricia Arquette
發布: 2024-10-31 02:12:30
原創
125 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!