Trasis Inc.

渋谷拠点のシステム開発会社

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);

参考URL

PostgreSQLで実行中のSQLの情報を取得する @ ELFの業務日誌