[PostgreSQL] 장기 실행 쿼리 확인 & 중단

뭔가 Lock을 잘못 걸거나, 쿼리 최적화를 말아먹었다면 DB가 가사상태에 빠질 수도 있다.

그럴때는 다음과 같은 쿼리로 뭐가 오래 걸리는지 확인할 수 있다.

SELECT
    pid,
    now() - pg_stat_activity.query_start AS duration,
    query,
    state,
    usename,
    datname,
    client_addr
FROM pg_stat_activity
WHERE (now() - pg_stat_activity.query_start) > interval '1 minutes'
  AND state = 'active'
  AND query NOT LIKE '%pg_stat_activity%'
ORDER BY duration DESC;

이 상태에서 저 오래 걸리는 쿼리를 중단시키고 싶다면, 저 pid를 가져다가 pg_terminate_backend 함수를 실행시키면 된다.

SELECT pg_terminate_backend(PID);