PostgreSQLで現在実行中のSQLの確認と、プロセスのkill
概要
PostgreSQL上で実行中のSQLを停止する方法について説明する。
Javaサーバ上で時間のかかるSQLを実行してしまい、Javaサーバを停止せずにそのスレッドだけを停止したい場合などにおいて、次の手順で実行された SQL を停止できる。
手順
プロセスID(pid)の確認
まず、問題のSQLが実行されるプロセスのIDを調べる。
コマンドラインなどで、次のSQLを実行。
SELECT procpid, start, now() - start AS lap, current_query FROM (SELECT backendid, pg_stat_get_backend_pid(S.backendid) AS procpid, pg_stat_get_backend_activity_start(S.backendid) AS start, pg_stat_get_backend_activity(S.backendid) AS current_query FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS S ) AS S WHERE current_query <> '' ORDER BY lap DESC;
それぞれの項目は次の意味を表す。
procpid | プロセスID |
---|---|
start | プロセス実行開始時間 |
lap | 経過時間 |
current_query | 実行中のSQL |
プロセスの停止
プロセスIDが分かったら、次のSQLでプロセスを停止できる。
SELECT pg_cancel_backend(プロセスID);