「テーブル メタデータ ロックを待機しています」のソースを調査する
MySQL で、DDL 中に「テーブル メタデータ ロックを待機しています」メッセージが発生するクエリはイライラするかもしれません。この状態は、多くの場合、別のトランザクションが影響を受けるテーブルのロックを保持しており、現在のトランザクションの進行を妨げていることを示します。
犯人トランザクションの特定
どのトランザクションが原因であるかを特定するにはこの保留の責任がある場合は、次のアプローチの使用を検討してください。
1. MySQL v5.5.24 以下
MySQL バージョン 5.7.3 より前の場合は、次のコマンドを実行します。
SHOW ENGINE INNODB STATUS \G
「TRANSACTIONS」セクションを調べて、問題のあるトランザクションを特定します。
2.情報スキーマ テーブル
待機中のすべてのロック:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
ブロック中のトランザクション:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS);
特定のテーブルのロック:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS WHERE LOCK_TABLE = db_name.table_name;
ロックを待機しているトランザクション:
SELECT TRX_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY FROM INFORMATION_SCHEMA.INNODB_TRX WHERE TRX_STATE = 'LOCK WAIT';
追加参照:
この問題のトラブルシューティングに関する包括的なガイドについては、「MySQL のトラブルシューティング: クエリが機能しない場合の対処方法」、第 6 章、96 ページを参照してください。
以上がMySQL で「テーブル メタデータ ロックの待機中」を引き起こしている犯人トランザクションを特定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。