[PostgreSQL] PostgreSQL Idle 상태의 Session 삭제 방법

개요

  • PostgreSQL 에서는 max_connection 속성을 이용하여 Session 수를 사전에 미리 설정할 수 있습니다.
  • Default 는 100으로 되어있는데, pgAdmin 에서 작업 중 종종 Session 이 100개를 초과하여 too many client Excetion 에러가 발생하는 경우가 있습니다.
  • 때문에, Session 이 Idle 인 상태인 경우를 찾아서 Kill 하는 방법에 대해서 정리 진행합니다.

Idle 상태 Session PID 조회

  • Idle 상태의 Session 의 PID를 조회하는 SQL 구문은 다음과 같습니다.
  • 다음 SQL 구문은 state_change 시간이 5분을 초과한 Session 의 PID 를 조회하는 구문입니다.
SELECT pid
FROM pg_stat_activity
WHERE datname = 'target_db_name'
AND  pid <> pg_backend_pid()
AND  state = 'idle'
AND  state_change < current_timestamp - INTERVAL '5' MINUTE;

  • 위와 같이 몇 개의 PID 가 조회되는 것을 확인할 수 있습니다.

Idle 상태 Session PID 삭제

  • 위에서 Idle 상태의 Session PID 를 조회하는 방법에 대해서 알아 보았습니다.
  • 그럼 실제로 조회된 PID 의 Session 을 Kill 하는 SQL 구문을 작성해 보겠습니다.
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'target_db_name'
AND  pid <> pg_backend_pid()
AND  state = 'idle'
AND  state_change < current_timestamp - INTERVAL '5' MINUTE;
  • pg_terminate_backend(pid) 함수를 이용하게 되면, 조회된 PID 대상으로 Session 을 Kill 하게 됩니다.
  • 해당 SQL 구문을 실행 후, Idle 상태의 Session PID 를 조회하여 정상적으로 삭제 되었는지 확인합니다.

  • 조회 결과, 이미 Idle 상태의 Session 이 Kill 되어 아무 데이터도 조회되지 않는 것을 확인할 수 있습니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY