「テーブル メタデータ ロックの待機中」状態を引き起こすトランザクションの特定
MySQL バージョン 5.5.24 のテーブルで DDL 操作を試行したが、次のエラーが発生した場合「テーブル メタデータ ロックを待機しています」メッセージが表示された場合は、このロックの原因となっているトランザクションを特定することが重要になります。
解決策
MySQL バージョン 5.7.3 より前の場合:
次のコマンドを実行して、状態に関する詳細情報を取得します。
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 中国語 Web サイトの他の関連記事を参照してください。