メタデータロックを待機しているため、テーブルを削除できません


11

1つのテーブルを削除しようとしていますが、それがハングアップしています。「SHOW PROCESSLIST」コマンドを見ると、「メタデータのロックを待っています」と表示されています。その特定のテーブルで操作を実行することもできません。誰かがそれを解決する方法を知っていますか?

回答:


8

InnoDBテーブルがSELECTまたはDML(INSERT、UPDATE、DELETE)を介してまったくアクセスされている場合、メタデータのロックが予想されます。

よると、メタデータのロック上のMySQLのドキュメント

トランザクションの直列化を保証するために、サーバーは、あるセッションが別のセッションの未完了のトランザクションで使用されているテーブルに対してデータ定義言語(DDL)ステートメントを実行することを許可してはなりません。サーバーは、トランザクション内で使用されるテーブルのメタデータロックを取得し、トランザクションが終了するまでそれらのロックの解放を延期することにより、これを実現します。テーブルのメタデータロックは、テーブルの構造への変更を防ぎます。このロック方法には、1つのセッション内のトランザクションで使用されているテーブルを、トランザクションが終了するまで他のセッションのDDLステートメントで使用できないという意味があります。

つまり、別のDBセッションがテーブルのロックを保持しているかどうかを判断する必要があります。そのようなセッションが未完了のトランザクションである場合は、ホールドアップが存在する可能性があります。

ディスク容量をすばやく戻す必要がある場合は、を実行できますTRUNCATE TABLE

提案

次のように削除する前に、テーブルの名前を変更してください。

ALTER TABLE mydb.mytable RENAME mydb.mytabletodrop;
TRUNCATE TABLE mydb.mytabletodrop;
DROP TABLE mydb.mytabletodrop;

提案は私たちのために機能しませんでした。代わりに、ALTER TABLEのfoo名前変更で「テーブルメタデータロックの待機」が発生しますfootodrop
Motin

@Motinは、1つ以上のDB接続がまだテーブルにアクセスしていたことを意味しますfoo。これらの接続がすべて完了すると、次にALTER TABLE進むことができます。
RolandoMySQLDBA 2016年

7

次のコマンドを実行して、どのクエリがトランザクションロックを引き起こしているかを確認する必要があります。

SHOW ENGINE INNODB STATUS

というセクションを参照してくださいTRANSACTION。後でデータベースを削除するには、そのクエリを強制終了する必要があります。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.