「テーブル メタデータ ロックの待機中」状態を引き起こすトランザクションの特定
MySQL で、実行中に「テーブル メタデータ ロックの待機中」メッセージが発生しました。 DDL 操作は、別のトランザクションによって保持されているロックを示します。原因となるトランザクションを特定するには、次の方法を検討してください。
MySQL バージョン 5.7.3
-
SHOW ENGINE INNODB STATUS G:
このコマンドは、開いているトランザクションをリストする「TRANSACTIONS」セクションを表示します。
INFORMATION_SCHEMAテーブル
-
SELECT * FROM INNODB_LOCK_WAITS:
すべてのロック待機に関する情報を取得します。-
SELECT * FROM INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID)からINNODB_LOCK_WAITS):
ブロックしているトランザクションを識別します。-
SELECT * FROM INNODB_LOCKS INNER JOIN INNODB_LOCK_WAITS ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID):
前と同じ情報をリストします。 query.-
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 サイトの他の関連記事を参照してください。