「テーブルメタデータロックの待機」状態を引き起こしているトランザクションを見つけるにはどうすればよいですか?


94

テーブルでDDLを実行しようとするとSHOW PROCESSLIST、「テーブルメタデータのロックを待機しています」というメッセージが表示されます。

どのトランザクションがまだ閉じられていないかを知るにはどうすればよいですか?

MySQL v5.5.24を使用しています。

回答:


145
SHOW ENGINE INNODB STATUS \G

セクションを探す-

TRANSACTIONS

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。


17
参照されているすべてのテーブルがINFORMATION_SCHEMAデータベースにあることに注意してください。
Michael

9
これらのInnoDBテーブルは実際にメタデータロックに関する情報を保持していますか?このブログ記事は、そうでない場合は示唆:mysql.wisborg.dk/2014/01/13/...
ガレス

1
@Gareth:mysql -mysql-5-7-3-まで機能します。更新ありがとうございます。
Joddy、2015

11
これらすべてに空のセットがありましたが、まだロックが
プロセスリスト

1
以下のコメントチェックアウトstackoverflow.com/a/36175882/362574
Joddy

50

テーブルをロックしているプロセスが見つからない場合(それはすでに死んでいるため)、それはまだこのようにクリーンアップしているスレッドである可能性があります

セクションTRANSACTION of

show engine innodb status;

最後に

---TRANSACTION 1135701157, ACTIVE 6768 sec
MySQL thread id 5208136, OS thread handle 0x7f2982e91700, query id 882213399 xxxIPxxx 82.235.36.49 my_user cleaning up

トランザクションのデッドロッククリアするのコメントで述べたように

ここでは、トランザクションスレッドを強制終了することができます。

 KILL 5208136;

私のために働いた。


10

mysql 5.7は、performance_schema.metadata_locksテーブルを通じてメタデータロック情報を公開し ます。

ドキュメントはこちら


4

Datagripにも同様の問題があり、これらのソリューションはどれも機能しませんでした。

Datagripクライアントを再起動すると、問題はなくなり、テーブルを再度ドロップできました。


3
再起動/再起動-すべてのコンピューターの問題に対する100%機能するソリューション。ただし、製品版では、再起動が常に可能とは限りません
18

1
同じ問題があり、DataGripを閉じると突然すべてのロックが解除されました。それは無駄な時間の束です
。– ScottBurfieldMills
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.