WEB開発備忘録

PostgreSQLで時間の掛かっているクエリを参照しキャンセルする

PostgreSQLでDBが激重になった際に、問題クエリの実行待ちの列をキャンセルした際のメモ。
問題あるクエリを発見するのにも役立ちました。(スロークエリーに出る前にロック状態になってたので)

(1).重いクエリを調査する / 開始時刻が遅い順に現在実行中のクエリをセレクト

select pid,query_start,state,query from pg_stat_activity order by query_start asc;

stateがactiveになっているクエリが問題あり。
pidでプロセスIDを取得しているからキャンセルできるクエリかをqueryカラムで確認して、
キャンセル出来るなら次項の方法でキャンセル。

(2).重いクエリをキャンセルする / 前段で取得したpidを指定して(前項のpidカラムより)

SELECT pg_cancel_backend(PID);