관리형 연결 풀링을 사용하면 Cloud SQL 인스턴스의 리소스 사용과 연결 지연 시간을 최적화하여 워크로드를 확장할 수 있습니다. PostgreSQL은 연결마다 새 프로세스를 생성하므로 메모리 사용량과 연결 설정 오버헤드가 발생합니다. Cloud Run에서 실행되는 마이크로서비스 또는 서버리스 애플리케이션과 같이 수명이 짧은 연결을 자주 설정하는 아키텍처에서는 이 오버헤드가 데이터베이스 성능과 확장성에 영향을 미칠 수 있습니다.
관리형 연결 풀링이 사용 설정되면 클라이언트는 데이터베이스 서버에 직접 연결하는 대신 중간 연결 풀 클러스터에 연결합니다. 이 동적 할당은 갑작스러운 연결 급증을 흡수하고 기존 데이터베이스 연결을 재사용하여 특히 확장된 연결의 성능을 개선합니다.
연결 풀러 및 연결 풀
클라이언트 애플리케이션이 관리형 연결 풀링이 사용 설정된 인스턴스에 연결되면 데이터베이스 서버에 직접 연결하는 대신 중간 연결 풀 클러스터에 연결됩니다. 연결 풀 클러스터는 하나 이상의 연결 풀러로 구성됩니다. 연결 풀러는 클라이언트 애플리케이션과 데이터베이스 서버 간의 데이터베이스 연결을 관리하고 라우팅하는 데이터베이스 프록시 서비스입니다.
연결 풀러는 데이터베이스 및 사용자 쌍당 열린 재사용 가능한 데이터베이스 서버 연결 그룹으로 연결 풀을 유지합니다.
인증된 클라이언트 애플리케이션이 특정 사용자로 데이터베이스에 연결되면 연결 풀러는 요청을 해당 연결 풀로 라우팅합니다.
- 풀에 유휴 서버 연결이 있으면 연결 풀러가 클라이언트 요청에 할당합니다.
- 유휴 서버 연결을 사용할 수 없고 풀 제한(
max_pool_size)에 도달하지 않은 경우 연결 풀러는 풀에 새 서버 연결을 만듭니다. - 풀의 모든 서버 연결이 사용 중이고 풀 한도에 도달한 경우 서버 연결이 사용 가능해질 때까지 클라이언트가 대기 상태로 전환됩니다.
- 요청이 완료되면 서버 연결이 재사용을 위해 연결 풀로 반환됩니다.
풀러와 풀 간의 관계
단일 연결 풀러는 여러 연결 풀을 동시에 관리할 수 있으며, 각 풀은 해당 풀러를 통해 연결되는 고유한 데이터베이스 및 데이터베이스 사용자 쌍을 위한 것입니다.
인스턴스에서 여러 연결 풀러를 실행하는 경우 각 연결 풀러는 라우팅된 데이터베이스 및 사용자 쌍에 대해 자체 연결 풀 집합을 독립적으로 유지합니다.
관리형 연결 풀링 성능 및 확장 기능은 여러 수준에서 작동합니다.
연결 풀 클러스터 확장: 클러스터의 연결 풀러 수는 인스턴스에 프로비저닝된 vCPU 코어 수를 기준으로 자동으로 확장됩니다 (vCPU 수를 4로 나누며 최소 연결 풀러 수는 1개임). 이렇게 하면 연결 풀링이 병목 현상이 되지 않습니다. 수신 클라이언트 연결은 사용 가능한 연결 풀러에 분산됩니다. 예를 들면 다음과 같습니다.
- vCPU가 2개 또는 4개인 인스턴스는 연결 풀러 1개를 실행합니다.
- vCPU가 8개인 인스턴스는 연결 풀러 2개를 실행합니다.
- vCPU가 16개인 인스턴스는 연결 풀러 4개를 실행합니다.
- vCPU가 32개인 인스턴스는 연결 풀러 8개를 실행합니다.
- vCPU가 64개인 인스턴스는 연결 풀러 16개를 실행합니다.
풀러 및 풀 확장: 연결 풀러는 독립적으로 작동하므로 모든 구성 옵션은 인스턴스 전체가 아닌 연결 풀러별로 적용됩니다. 서버 연결은 각 연결 풀러의 각 관리 풀에 대해
max_pool_size로 정의된 최대 한도까지 필요에 따라 생성됩니다. 예를 들어 연결 풀러 2개 (vCPU 8개)를 실행하는 인스턴스에서max_pool_size가 50으로 설정된 경우 각 연결 풀러는 특정 데이터베이스 및 사용자 쌍에 대해 최대 50개의 서버 연결을 열 수 있으므로 해당 풀에 대해 인스턴스 전체에서 최대 100개의 서버 연결이 허용됩니다. 정확한 풀 크기 조정은 성능에 매우 중요합니다. 이 값을 너무 낮게 설정하면 연결 대기 시간이 길어질 수 있고, 너무 높게 설정하면 데이터베이스 서버 리소스가 낭비될 수 있습니다.클라이언트 연결 구성: 클라이언트 연결 제한 및 제한 시간 동작도 연결 풀러별로 구성됩니다. 주요 매개변수는 다음과 같습니다.
max_client_connections: 연결 풀러당 허용되는 최대 클라이언트 연결 수를 제한합니다 (기본값은 연결 풀러당 5,000개 연결).client_connection_idle_timeout: 클라이언트 연결이 타임아웃되기 전에 유휴 상태로 유지될 수 있는 기간을 제어합니다.query_wait_timeout: 타임아웃되기 전에 쿼리가 풀에서 사용 가능한 서버 연결을 기다리는 시간을 제어합니다.
사용 사례 및 고려사항
관리형 연결 풀링을 사용할 때는 다음 사항에 유의하세요.
- 모든 트랜잭션 워크로드에 관리형 연결 풀링을 사용할 수 있지만, 단기 지속 연결이 포함된 애플리케이션이나 연결 급증을 유발하는 애플리케이션에 가장 높은 처리량과 지연 시간 이점을 제공합니다.
- 장기 지속 연결의 경우 관리형 연결 풀링을 사용하는 연결 성능이 직접 연결을 사용할 때보다 약간 낮을 수 있습니다. 이 경우 연결 수가 매우 많으면 관리형 연결 풀링에서 연결 확장 기능을 제공합니다. 하지만 일반적으로 장기 지속 연결을 설정하는 애플리케이션의 경우 연결 풀링을 사용하지 않는 것이 좋습니다.
- 관리형 연결 풀링에서 사용하는 포트에 따라 Identity and Access Management를 사용하여 인스턴스에 대한 연결을 보호할 수 있습니다. Cloud SQL에서 IAM이 작동하는 방식과 제한사항에 대한 자세한 내용은 IAM 인증을 참고하세요.
관리형 연결 풀링을 사용 설정하는 방법에 대한 자세한 내용은 관리형 연결 풀링 구성을 참고하세요.
요구사항
관리형 연결 풀링을 사용하려면 인스턴스가 다음 요구사항을 충족해야 합니다.
- 인스턴스가 Cloud SQL Enterprise Plus 버전 인스턴스여야 합니다.
- 직접 연결 또는 Cloud SQL 인증 프록시만 사용하여 인스턴스에 연결해야 합니다.
- 인스턴스가 비공개 서비스 액세스를 사용하도록 설정되어 있고 공개 IP를 사용하거나, Private Service Connect가 사용 설정된 새 인스턴스여야 합니다.
- 인스턴스에서 새 Cloud SQL 네트워크 아키텍처를 사용해야 합니다.
- 관리형 연결 풀링을 사용하려면 유지보수 버전 번호가
POSTGRES_$version.R20250727.00_14이상이어야 합니다. 셀프 서비스 유지보수 수행에 관한 자세한 내용은 셀프 서비스 유지보수 수행을 참고하세요.
풀링 옵션
관리형 연결 풀링을 사용하면 pool_mode 매개변수를 사용하여 연결이 풀링되는 방식을 관리할 수 있습니다. 다음 풀링 옵션을 사용할 수 있습니다.
transaction(기본값): 트랜잭션 수준에서 연결을 풀링합니다. 연결은 각 트랜잭션이 완료된 후 풀로 반환됩니다. Cloud SQL에서는 수명이 짧은 연결에transaction풀링 모드를 사용하는 것을 권장합니다.session: 세션 수준에서 연결을 풀링합니다. 각 세션은 세션 상태를 유지하는 전용 서버 연결을 사용합니다. 이렇게 하면 풀링 효율성이 떨어집니다. 클라이언트가 연결을 끊으면 서버 연결이 연결 풀로 돌아갑니다.
고급 구성 옵션
다음 구성 옵션을 사용하여 관리형 연결 풀링을 맞춤설정할 수 있습니다.
| 구성 이름 | 설명 |
|---|---|
max_pool_size
|
각 연결 풀에서 데이터베이스 및 사용자 쌍에 허용되는 최대 서버 연결 수입니다. 이 구성은 연결 풀러별로 적용됩니다. 인스턴스 크기 및 풀 크기 요구사항에 따라 이 값을 결정합니다.
기본값은 각 연결 풀러의 데이터베이스 및 사용자 쌍당 50 연결입니다.
|
min_pool_size
|
각 연결 풀에서 언제든지 사용할 수 있는 최소 서버 연결 수입니다. 이 구성은 연결 풀러별로 적용됩니다.
인스턴스 크기 및 풀 크기 요구사항에 따라 이 값을 결정합니다.
서버 연결 수가 min_pool_size보다 작으면 이 설정은 풀에 서버 연결을 더 추가합니다. 이렇게 하면 비활성 기간 후 데이터베이스 부하가 갑자기 증가하는 것을 관리하고 연결을 사용할 수 있도록 준비할 수 있습니다.
기본값은 0 연결입니다.
|
max_client_connections
|
관리형 연결 풀링을 사용할 때 연결 풀러당 허용되는 최대 클라이언트 연결 수입니다. 인스턴스 크기 및 풀 크기 요구사항에 따라 이 값을 결정합니다.
기본값은 각 연결 풀러에 대해 5,000개의 연결입니다.
|
max_prepared_statements
|
transaction 풀링 모드에서 연결 풀러당 지원되는 프로토콜 수준의 이름이 지정되고 준비된 문의 최대 수입니다.
인스턴스 크기 및 풀 크기 요구사항에 따라 이 값을 결정합니다.
이 옵션을 0로 설정하면 준비된 명령문 지원이 사용 중지됩니다. 최적의 성능을 위해 이 값은 데이터베이스에서 흔히 사용되는 준비된 명령문의 수를 초과해야 합니다. 관리형 연결 풀링의 준비된 문 수가 많으면 메모리 사용량이 증가할 수 있습니다.
기본값은 0 문입니다.
|
client_connection_idle_timeout
|
클라이언트 연결이 타임아웃되기 전에 유휴 상태로 유지되는 시간입니다.
이 값의 범위는 0~2,147,483초이며 기본값은 0초입니다.
|
server_connection_idle_timeout
|
서버 연결이 타임아웃되기 전에 유휴 상태로 유지되는 시간입니다.
이 값의 범위는 0~2,147,483초이며 기본값은 600초입니다.
|
query_wait_timeout
|
쿼리가 타임아웃되기 전에 풀에서 서버 연결을 기다리는 시간입니다.
이 옵션을 0으로 설정하면 사용 중지되어 무기한 클라이언트 대기열이 허용됩니다. 이 옵션을 사용 설정하면 응답하지 않는 서버가 연결을 지연하는 것을 방지할 수 있습니다. 이 값의 범위는 0~2,147,483초이며 기본값은 120초입니다.
|
ignore_startup_parameters
|
무시할 매개변수입니다. 기본적으로 관리형 연결 풀링 시작 패킷에서 추적되지 않습니다. |
server_lifetime
|
관리형 연결 풀링이 닫기 전에 서버 연결이 사용되지 않는 최대 시간입니다. 값이 0초로 설정되면 사용 후 연결이 즉시 닫힙니다.
기본값은 3600초입니다.
|
제한사항
Cloud SQL Enterprise Plus 버전 인스턴스에서 관리형 연결 풀링을 사용할 때는 다음 제한사항을 고려하세요.
- 기존 인스턴스에서 관리형 연결 풀링을 사용 설정하면 데이터베이스가 다시 시작됩니다.
- 관리형 연결 풀링은 Cloud SQL 인증 프록시 버전 2.15.2 이상에서만 사용할 수 있습니다.
- Cloud SQL Go Language 커넥터를 사용하는 경우 Go 버전은 최소
1.24이상이어야 합니다. Go 버전 1.23 이하를 사용하는 경우 관리형 연결 풀링을 사용할 때 성능이 제한될 수 있습니다. transaction풀링 모드에서 관리형 연결 풀링을 사용하는 경우 다음 SQL 기능은 지원되지 않습니다.SET/RESETLISTENWITH HOLD CURSORPREPARE/DEALLOCATEPRESERVE/DELETE ROW임시 테이블LOAD- 세션 수준 권고 잠금
포트 3307 및 6432에서 관리형 연결 풀링 풀러에 asyncpg 데이터베이스 인터페이스 라이브러리를 사용하는 경우 관리형 연결 풀링 풀러에서 준비된 문을 지원하도록
max_prepared_statements를 0보다 큰 값으로 업데이트해야 합니다.PostgreSQL용 Cloud SQL 버전 17을 사용하는 경우
sslnegotiation=direct옵션은 지원되지 않습니다.관리형 연결 풀링에서는 클라이언트 IP 추적이 지원되지 않습니다. 쿼리 통계에서 클라이언트 IP 주소 저장을 사용 설정하면 클라이언트 IP 주소가 IP 주소 자체가 아닌
local로 표시됩니다.
관리형 연결 풀링에서 사용되는 포트
관리형 연결 풀링을 사용 설정하면 Cloud SQL 인스턴스에서 데이터베이스 트래픽을 처리하는 데 사용되는 포트가 변경됩니다. 포트에 따라 ID 및 액세스 관리를 사용하여 연결을 보호할 수 있습니다.
관리형 연결 풀링에서 사용되는 포트와 사용 가능한 IAM 옵션은 다음과 같습니다.
TCP 포트
5432: Postgres 데이터베이스 서버의 직접 연결에 사용됩니다. psql 클라이언트를 사용하여 직접 연결할 때 사용되는 기본 포트 번호입니다.TCP 포트
6432: 관리형 연결 풀링 서버의 직접 연결에 사용됩니다. 이 포트를 사용하여 연결하려면 psql 클라이언트를 사용하여 직접 연결할 때psql -p 6432를 지정하세요.이 포트를 사용할 때는 IAM 인증 옵션을 사용할 수 있습니다.
TCP 포트
3307: 관리형 연결 풀링 서버에서 Cloud SQL 인증 프록시 전용 연결에 사용됩니다. Cloud SQL 인증 프록시를 사용하여 관리형 연결 풀링에 연결하는 경우 이 포트 번호는 Cloud SQL 인증 프록시 클라이언트로 구성되며 변경할 수 없습니다.이 포트와 함께 IAM 인증 옵션 또는 자동 IAM 데이터베이스 인증을 사용할 수 있습니다.
관리형 연결 풀링에서 사용하는 서버 연결
max_connections 데이터베이스 구성은 관리형 연결 풀링의 풀러가 사용할 수 있는 최대 서버 연결 수를 제한합니다.
Cloud SQL에서는 인스턴스의 워크로드 요구사항과 데이터베이스 인스턴스 크기에 따라 이 값을 조정하는 것을 권장합니다. 최대 부하 시 인증 연결 수가 매우 많아질 수 있습니다.
풀당 기본 max_pool_size인 50개의 연결을 사용하는 경우 데이터베이스의 max_connections 플래그를 설정할 때 관리형 연결 풀링을 위해 CPU당 서버 연결을 15개 이상 예약하는 것이 좋습니다.
max_connections 플래그에 대한 자세한 내용은 최대 동시 연결을 참고하세요.
인스턴스의 max_connections 플래그를 수정하려면 데이터베이스 플래그 구성을 참고하세요.