연결 풀링
PostgreSQL의 연결 풀링이란 무엇인가요?
연결 풀링은 데이터베이스 연결 여러 개를 열어 둔 채 많은 클라이언트가 공유하게 합니다. PostgreSQL에서는 연결마다 별도의 서버 프로세스가 처리하기 때문입니다.
PostgreSQL은 사용자당 프로세스(process-per-user) 모델을 사용합니다. 모든 클라이언트 연결은 서버의 개별 백엔드 프로세스가 처리하며, max_connections 설정이 동시에 존재할 수 있는 연결 수의 상한을 정합니다. 연결 풀은 애플리케이션과 데이터베이스 사이에 위치해 제한된 수의 서버 연결을 열어 두고 필요에 따라 클라이언트에 나누어 줍니다.
풀은 애플리케이션 내부에 둘 수도 있고(대부분의 드라이버와 ORM에 포함되어 있습니다), PgBouncer처럼 서버 앞에 두는 별도의 풀러로 운영할 수도 있습니다. 트랜잭션 수준 풀링에서는 트랜잭션이 끝날 때마다 서버 연결이 풀로 돌아가므로 다음 트랜잭션은 다른 연결에서 실행될 수 있습니다. 세션 수준 SET 명령이나 임시 테이블처럼 세션 상태에 의존하는 기능은 이 모드에서 주의가 필요합니다.
예제
이 예제는 서버의 연결 한도를 표시하고 현재 클라이언트 연결 수를 상태별로 셉니다. 유휴 연결이 많다면 풀이 도움이 된다는 흔한 신호입니다.
SHOW max_connections;
SELECT state, count(*)
FROM pg_stat_activity
WHERE backend_type = 'client backend'
GROUP BY state;확장 없이 기본 PostgreSQL 16 또는 17에서 실행되는 일반 SQL입니다. 버려도 되는 빈 데이터베이스에서 실행하세요.
출처
PostgreSQL 공식 문서(영문)입니다.