タイトル: 実行中のSQLの状態確認およびプロセスキルの方法
実行中SQLの一覧表示
以下のコマンドを実行することで、実行中のSQLを一覧表示させることが出来る。
|
SHOW PROCESSLIST; |
主な出力カラムは次の通り。
| カラム | 意味 |
|---|---|
| Id | セッション/プロセスID(KILLで指定する番号) |
| User | 接続ユーザー |
| Host | 接続元ホスト |
| db | 対象データベース |
| Command | 処理種別(Query、Sleep等) |
| Time | その状態の経過秒数 |
| State | 内部状態(Sending data、Waiting for table lock等) |
| Info | 実行中SQLの内容(途中で切れることあり) |
完全なSQLを見たい場合
SHOW PROCESSLIST; は Info カラムが100文字程度で切られます。フル表示するには:
|
SHOW FULL PROCESSLIST; |
プロセスキル
以下のコマンドを実行することで、実行中のSQLプロセスをキルすることが出来る。
上記の一覧表示コマンドで表示されたIDをKILLの引数にすればよい。
|
KILL [ID] |
KILL の2つのモード
| コマンド | 動作 |
|---|---|
KILL ID; | そのセッションの接続を切る(既定) |
KILL QUERY ID; | 実行中のクエリのみ停止。接続は維持 |
接続を残したまま長時間クエリだけ止めたい場合は KILL QUERY を使います。
典型的な使い方
|
-- 1. 何が動いているか確認 |
権限
- 自分のセッションは常にKILL可能
- 他ユーザーのセッションをKILLするには
PROCESS権限とSUPER(MySQL 5.7)またはCONNECTION_ADMIN(MySQL 8.0+)が必要 - 本番では
SUPER権限を持つアカウントを限定する
関連する情報取得
|
-- ロック待ち状況 |
注意点
- KILLしてもすぐ消えないことがある: 大きなトランザクションのROLLBACKに時間がかかる場合
- 本番KILLは慎重に: アプリ側がリトライしない作りだと業務影響あり
- 長時間SQLが頻発するなら、根本的にはクエリ最適化・インデックス・タイムアウト設定の見直し
関連
- 親カテゴリ: MySQL & MariaDB
- エラー&トラブル: エラー&トラブル
- 管理ツール: 管理ツール