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

Patricia Arquette
リリース: 2024-10-31 12:54:30
オリジナル
704 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!