ホームページ >データベース >mysql チュートリアル >MySQL で「テーブル メタデータ ロックの待機中」を引き起こしているトランザクションを特定する方法

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

DDD
DDDオリジナル
2024-10-31 01:19:29718ブラウズ

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

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