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

DDD
リリース: 2024-10-31 01:19:29
オリジナル
643 人が閲覧しました

How to Identify Transactions Causing

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

テーブルに対して DDL 操作を実行しようとすると、 SHOW PROCESSLIST の「テーブル メタデータ ロックを待機しています」メッセージ。これは、別のトランザクションがまだテーブルを参照しており、そのメタデータが変更されないことを示します。

トランザクションの識別

5.7.3 より前の MySQL バージョン:

  • コマンドを実行します: SHOW ENGINE INNODB STATUS G
  • 「TRANSACTIONS」セクションを見つけます。

MySQL バージョン 5.7 の場合.3 以降:

  • 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 * 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';
ログイン後にコピー

出力例:

INNODB_LOCK_WAITS クエリは次のような出力を提供します:

...
REQUESTING TRXs:
trx id 10,mysql thread id 1161142,query SELECT ...
trx id 16,mysql thread id 1161141,query SELECT ...
...
ログイン後にコピー

これは、トランザクション ID 10 と 16 がロックを待っていることを示します。提供されている他のクエリを使用して、ブロックしているトランザクションとロックされている特定のテーブルを特定することで、さらに分析を行うことができます。

以上がMySQL で「テーブル メタデータ ロックの待機中」を引き起こしているトランザクションを特定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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