[解決済み] どのトランザクションが「テーブルメタデータのロック待ち」状態を引き起こしているかを確認するにはどうすればよいですか?
2022-03-12 22:10:08
質問
あるテーブルに対してDDLを実行しようとしているのですが
SHOW PROCESSLIST
の結果、「Waiting for table metadata lock "」というメッセージが表示されます。
どのトランザクションがまだ終了していないのかを知るにはどうしたらよいですか?
MySQL v5.5.24を使用しています。
解決方法を教えてください。
MySqlのバージョン5.7.3で動作します。
SHOW ENGINE INNODB STATUS \G
セクションを探す
TRANSACTIONS
を使用することができます。
情報スキーマ
テーブルです。
便利なクエリ
トランザクションが待機しているすべてのロックについて確認する。
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ページ
関連
-
面接では選択式で聞かれましたが......。.for updateはテーブルをロックするか、行をロックするか?
-
mysqlインデックスが長すぎる特殊なキーが長すぎる解決策
-
[解決済み] SQLエラー。ORA-01861:リテラルは、フォーマット文字列01861に一致しません。
-
[解決済み】MySQLの「ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションを再起動してみてください」を回避する方法
-
[解決済み] MySQLでコマンドラインを使用してユーザーアカウントのリストを取得するにはどうすればよいですか?
-
[解決済み] MySQLの重複レコードを検索する
-
[解決済み] エラー 1698 (28000)。ユーザー 'root'@'localhost' のアクセスが拒否されました。
-
[解決済み] 特定のテーブルの MySQL エンジンタイプを確認するにはどうすればよいですか?
-
[解決済み】既存テーブルへの外部キー追加
-
[解決済み】MySQLで正規表現による置換を行うには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン