PostgreSQL sorry, too many client already

min·2025년 1월 6일

출처
https://hub.docker.com/_/postgres

docker 환경에서 postgresql 구축 후 사용하는데 갑자기 서버 응답이 느려지다가 오류가 발생했다. 로그를 확인해보니 Postgre에서 오류 로그가 발생하고 있었음.

PostgreSQL sorry, too many client already 

개발 환경에서는 한 번도 발생하지 않았던 부분이라서 우선 Connection Pool에 대한 테스트도 추후 진행 할 예정이지만 우선 다른 팀원들이 DB 접근이 빠르게 필요한 사항이라 임시 조치를 진행했다.

방법은 우선 세션 최대 connection 수를 올리는 것임

해당 이미지 기준으로 아래 경로에 postgresql.conf 확인 할 수 있다.
/var/lib/pstogresql/data/postgresql.conf

여기서 max_connections를 기본 값에서 올려주면 됨.

show max_connections

나는 docker-compose로 환경 구성 중이여서 volume으로 연결해서 수정해서 올렸다.

docker run -d --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword postgres -c shared_buffers=256MB -c max_connections=200

이후 실제로 세션이 올라가는지 확인하는 작업을 진행했다.

select * from pg_stat_activity (where datname='데이터베이스 이름')

해당 쿼리를 실행하면 현재 postgre에 붙어있는 connection 정보를 확인 할 수 있음.
실제로 IDEL 상태의 connection이 많았는데 API 호출 후에 늘어나는 것을 확인 할 수 있었다.

SELECT pg_terminate_backend(pid) FROM pg_stat_activity
WHERE datname = 'databasename'
AND pid <> pg_backend_pid()
AND state in ('idle');

이런 식으로 쿼리로 죽일 수 있다고하는 하는데, 우선 connection pool은 구현 해 둔 상태여서 세션이 늘어나지 않는 걸 기대했는데; 내일 어디에서 붙는지는 확인해야겠다.

profile
기록으로 기억하기

0개의 댓글