연결 처리 이해하기
Postgres는 프로세스 기반 연결 모델을 사용합니다. 연결을 설정하려면 운영 체제와 소량의 메모리 할당이 포함됩니다. 각 SQL 쿼리는 현재 연결을 사용하여 실행됩니다.
연결 상태
연결은 다음 네 가지 상태 중 하나일 수 있습니다.
- 활성 - 현재 쿼리를 실행 중인 활성 연결입니다.
- 유휴 - 사용하고 있지 않는 열린 연결입니다.
- 트랜잭션에서 유휴 상태 - 어떤 작업도 수행하지 않고 대기 중인 연결입니다. pg_stat_activity 사용하여 연결이 수행하는 작업과 이 상태의 기간을 파악합니다.
- 트랜잭션에서 유휴 상태(중단됨) - 이전에 트랜잭션 유휴 상태였지만 지금은 중단된 연결입니다.
프로세스 기반 연결 모델을 사용하면 많은 유휴 연결을 유지하는 데 비용이 많이 듭니다.
최대 연결 수
PostgreSQL은 max_connections이라는 서버 매개 변수를 사용하여 한 번에 서버에 대한 최대 동시 연결 수를 제한합니다. Azure Database for PostgreSQL에서 기본값은 컴퓨팅 계층에 따라 달라집니다. 허용되는 값은 25에서 5000 사이입니다.
PostgreSQL의 온-프레미스 구현은 슈퍼 사용자가 데이터베이스의 무결성을 유지하기 위해 일부 연결을 예약합니다. 이 예약은 일반적으로 max_connections 값의 15%입니다.
Azure Database for PostgreSQL은 관리되는 솔루션이며 유연한 서버를 모니터링하기 위해 세 개의 연결을 자동으로 예약합니다.
메모
Azure Database for PostgreSQL에서 superuser_reserved_connections 관리하는 서버 매개 변수는 없습니다.
연결 풀링
연결을 자주 열고 닫는 클라이언트 애플리케이션은 연결 대기 시간을 경험할 수 있으므로 초당 트랜잭션이 줄어들고 전체적인 애플리케이션 대기 시간이 늘어나게 됩니다.
Azure Database for PostgreSQL은 연결을 자주 열고 닫는 대신 연결 풀링을 권장합니다. 연결 풀링에서는 연결을 닫고 다시 만드는 대신 기존 연결을 다시 사용합니다. 이 프로세스는 연결 대기 시간을 줄이고 서버의 데이터베이스에 대해 초당 더 높은 데이터베이스 트랜잭션을 허용합니다.
연결 풀링을 사용하면 서버가 시작될 때 고정된 연결 집합이 설정되고 이러한 연결이 유지 관리됩니다. 또한 연결 풀링을 사용하면 서버에서 지속적으로 생성되는 새 연결로 인한 메모리 조각화를 줄일 수 있습니다.
PGBouncer Azure Database for PostgreSQL에 기본 제공되는 연결 풀링 솔루션입니다. pgBouncer를 사용하도록 설정하려면:
- Azure Portal에서 Azure Database for PostgreSQL 서버로 이동합니다.
- 왼쪽 메뉴에서 서버 매개 변수를 선택합니다.
- 검색 창에서 PgBouncer를 검색합니다.
- pgbouncer.enabled 설정을 true로 설정하여 PgBouncer를 사용하도록 설정합니다. 이 설정은 서버를 다시 시작할 필요가 없습니다.
- pgbouncer.default_pool_size 필요한 사용자/데이터베이스 쌍당 연결 수로 설정합니다. 기본값은 50입니다.
- pgBouncer.pool_mode 매개 변수를 TRANSACTION으로 설정합니다.
메모
PgBouncer는 공용 액세스 및 프라이빗 액세스 네트워킹 모두에서 범용 및 메모리 최적화 컴퓨팅 계층에서 지원됩니다. PgBouncer는 버스트 가능한 컴퓨팅 계층에서 지원되지 않습니다. 컴퓨팅 계층이 범용 또는 메모리 최적화에서 버스트 가능으로 변경되면 PGBouncer 기능이 손실됩니다.