[PostgreSQL] PostgreSQL Idle 상태의 Session 삭제 방법
- Database(데이터베이스)
- 2022. 10. 28. 20:50
개요
- 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
'Database(데이터베이스)' 카테고리의 다른 글
[Postgresql] PostgreSQL - JSON vs JSONB 공통점 및 차이점 (0) | 2023.03.07 |
---|---|
PostgreSQL - Docker Container로 실행하기 (0) | 2023.03.04 |
[PostgreSQL] postgresql too many clients already 오류 발생 및 해결 방법 (1) | 2022.10.13 |
[PostgreSQL] AutoVacuum 동작 테스트 (0) | 2022.07.10 |
[PostgreSQL] 아카이브 모드 백업을 이용한 특정 시점 복구 시나리오(Point In Time Recovery(PITR)) (0) | 2022.07.10 |
이 글을 공유하기