ホームページ  >  記事  >  データベース  >  MySQL で「テーブル メタデータ ロックを待機しています」を特定して解決する方法は?

MySQL で「テーブル メタデータ ロックを待機しています」を特定して解決する方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-31 12:54:30777ブラウズ

How to Identify and Resolve

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。