MySQL で「テーブル メタデータ ロックを待機中」状態を引き起こしているトランザクションを特定する方法

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

How to Identify Which Transaction is Causing the “Waiting for Table Metadata Lock” State in MySQL?

「テーブル メタデータ ロックの待機中」状態を引き起こすトランザクションの特定

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

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