この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:atom
更新日時:2026-05-17 15:10:58

タイトル: 実行中の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;

-- またはinformation_schemaから取得
SELECT * FROM information_schema.PROCESSLIST
WHERE COMMAND != 'Sleep'
ORDER BY TIME DESC;

プロセスキル

以下のコマンドを実行することで、実行中のSQLプロセスをキルすることが出来る。

上記の一覧表示コマンドで表示されたIDをKILLの引数にすればよい。

KILL [ID]

KILL の2つのモード

コマンド動作
KILL ID;そのセッションの接続を切る(既定)
KILL QUERY ID;実行中のクエリのみ停止。接続は維持

接続を残したまま長時間クエリだけ止めたい場合は KILL QUERY を使います。

典型的な使い方

-- 1. 何が動いているか確認
SHOW FULL PROCESSLIST;

-- 2. 長時間のSQL(Time が大きい)のIdを特定
-- 3. QUERYだけ停止
KILL QUERY 12345;

-- 4. それでも止まらないなら接続ごと切る
KILL 12345;

権限

  • 自分のセッションは常にKILL可能
  • 他ユーザーのセッションをKILLするには PROCESS 権限と SUPER(MySQL 5.7)または CONNECTION_ADMIN(MySQL 8.0+)が必要
  • 本番では SUPER 権限を持つアカウントを限定する

関連する情報取得

-- ロック待ち状況
SELECT * FROM information_schema.INNODB_LOCK_WAITS;

-- ロック保持中のトランザクション
SELECT * FROM information_schema.INNODB_TRX;

-- スレッド統計
SHOW STATUS LIKE 'Threads_%';

注意点

  • KILLしてもすぐ消えないことがある: 大きなトランザクションのROLLBACKに時間がかかる場合
  • 本番KILLは慎重に: アプリ側がリトライしない作りだと業務影響あり
  • 長時間SQLが頻発するなら、根本的にはクエリ最適化・インデックス・タイムアウト設定の見直し

関連