MySQL の「テーブル メタデータ ロックの待機中」状態のトラブルシューティング
テーブルで DDL 操作を実行すると、「テーブル メタデータ ロックの待機中」状態が発生する場合があります。 SHOW PROCESSLIST をチェックすると、メタデータ ロック」というメッセージが表示されます。これは、別のトランザクションがまだ終了しておらず、テーブルのロックを保持しているため、変更が妨げられていることを示します。
ブロックしているトランザクションの特定
どのトランザクションが原因であるかを特定するにはこの状態では、次の方法を使用できます。
1. SHOW ENGINE INNODB STATUS
(MySQL バージョン
SHOW ENGINE INNODB STATUS G を実行すると、TRANSACTIONS セクションを含む InnoDB の内部に関する詳細情報が表示されます。これにより、アクティブなトランザクションとそのステータスがリストされます。
2. INFORMATION_SCHEMA テーブル
INFORMATION_SCHEMA の INNODB_LOCK_WAITS テーブルには、ロックを待機しているトランザクションに関する情報が含まれています。このようなトランザクションをすべてチェックするには、次のコマンドを使用します。
<code class="sql">SELECT * FROM INNODB_LOCK_WAITS;</code>
ブロックしているトランザクションを特定するには、次のコマンドを実行します。
<code class="sql">SELECT * FROM INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);</code>
または、
<code class="sql">SELECT INNODB_LOCKS.* FROM INNODB_LOCKS JOIN INNODB_LOCK_WAITS ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);</code>
特定のトランザクションのロックをチェックします。テーブル:
<code class="sql">SELECT * FROM INNODB_LOCKS WHERE LOCK_TABLE = db_name.table_name;</code>
ロックを待機しているトランザクションをリストするには:
<code class="sql">SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY FROM INNODB_TRX WHERE TRX_STATE = 'LOCK WAIT';</code>
追加リソース
『MySQL トラブルシューティング ガイド』の第 6 章を参照してください。この問題の解決に関する詳細については、96 ページを参照してください。
以上がMySQL で「テーブル メタデータ ロックを待機しています」を特定して解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。