Important
Lakebase 자동 크기 조정은 자동 크기 조정 컴퓨팅, 0으로 크기 조정, 분기 및 즉시 복원이 포함된 최신 버전의 Lakebase입니다. 지원되는 지역은 지역 가용성을 참조하세요. Lakebase 프로비전된 사용자인 경우 Lakebase Provisioned를 참조하세요.
Lakebase에는 서버 연결 풀을 유지하고 여러 클라이언트 연결에서 공유하는 기본 제공 PgBouncer 연결 풀러가 포함되어 있습니다. 풀러는 최대 10,000개의 동시 연결을 지원하므로 서버리스 함수, 웹 API 및 많은 수명이 짧은 연결을 여는 다른 애플리케이션에 적합합니다.
연결 풀링에는 네이티브 Postgres 암호 인증이 필요합니다. OAuth 또는 Azure Databricks ID 역할에는 사용할 수 없습니다.
연결 풀링 작동 방식
Postgres는 각 클라이언트에 대해 별도의 프로세스를 만들기 때문에 각 Postgres 연결에서 서버 리소스를 사용합니다. 웹 API 및 서버리스 함수와 같은 여러 단기 연결을 여는 애플리케이션은 서버의 연결 제한을 빠르게 소진할 수 있습니다.
연결 풀러는 애플리케이션과 Postgres 사이에 있습니다. 클라이언트는 풀러에 연결하고, 풀러는 쿼리를 더 작은 실제 서버 연결 풀로 전달합니다. 트랜잭션이 완료되면 풀러는 풀에 대한 서버 연결을 반환하여 다음 클라이언트에서 사용할 수 있도록 합니다.
Lakebase는 트랜잭션 모드에서 PgBouncer를 실행합니다. 트랜잭션 모드에서 서버 연결은 단일 트랜잭션 기간 동안 유지된 다음 풀로 반환됩니다. 이렇게 하면 많은 클라이언트가 작은 서버 연결 풀을 공유할 수 있습니다.
트랜잭션 모드는 연결 효율성을 향상하지만 영구 서버 연결이 필요한 특정 Postgres 기능을 제한합니다. 트랜잭션 모드 제한 사항을 참조하세요.
연결 풀
PgBouncer는 각 데이터베이스 및 사용자 조합에 대해 별도의 풀을 만듭니다. 동일한 데이터베이스에 연결하는 두 사용자는 독립적인 풀을 가져옵니다. 각 풀의 크기는 컴퓨팅의 직접 연결 제한의 약 90%입니다.
풀의 모든 연결이 사용 중이면 새 클라이언트 요청이 큐에서 대기합니다. 2분 이내에 서버 연결을 사용할 수 없으면 클라이언트에서 시간 제한 오류가 발생합니다.
연결 제한
세 가지 제한은 연결 풀링을 제어합니다.
| 제한 | 가치 | 제어하는 내용 |
|---|---|---|
클라이언트 연결(max_client_conn) |
10000 | 애플리케이션에서 PgBouncer로의 최대 연결 |
풀 크기(default_pool_size) |
~90%의 max_connections |
(사용자, 데이터베이스) 쌍당 활성 서버 연결 |
직접 연결(max_connections) |
컴퓨팅 크기에 따라 다름 | 최대 직접 Postgres 접속 |
직접 연결 제한은 컴퓨팅 크기에 따라 달라집니다. 예를 들어 8 CU 컴퓨팅은 1,678개의 직접 연결을 지원하고 16개의 CU 컴퓨팅은 3,357을 지원합니다. 전체 목록은 컴퓨팅 사양을 참조하세요.
연결 풀링을 사용하면 애플리케이션에서 직접 연결 제한만으로도 허용되는 것보다 훨씬 더 많은 동시 사용자를 지원할 수 있습니다.
사전 요구 사항
- Lakebase 자동 크기 조정 프로젝트가 활성화되어 있어야 합니다.
- 프로젝트에 네이티브 Postgres 암호 역할이 있어야 합니다. 자세한 내용은 네이티브 Postgres 암호 역할 만들기를 참조하세요.
- 읽기 전용 풀러를 사용하려면 읽기 전용 컴퓨팅 인스턴스에 대한 액세스를 허용하는 고가용성 엔드포인트가 있어야 합니다. 고가용성을 참조하세요.
연결 풀링 활성화
- Lakebase 앱에서 프로젝트로 이동하여 연결을 클릭합니다.
- 연결할 분기 및 컴퓨팅을 선택합니다.
- 역할 드롭다운에서 네이티브 Postgres 암호 역할을 선택합니다. 연결 풀링 토글은 암호 역할을 선택한 경우에만 표시됩니다. OAuth 및 Azure Databricks ID 역할에 대해 숨겨집니다.
- 연결 풀링을 켭니다.
- 연결 문자열 복사하여 애플리케이션에서 사용합니다.
연결 문자열 형식
풀러 연결 문자열은 직접 데이터베이스 연결과 다른 호스트 이름을 사용합니다.
| 유형 | 호스트 이름 형식 | 사용 시기 |
|---|---|---|
| 읽기-쓰기 풀러 | <endpoint-id>-pooler.<region>.<cloud>.databricks.com |
풀러를 통해 라우팅된 모든 쓰기 및 읽기 트래픽 |
| 읽기 전용 풀러 | <endpoint-id>-ro-pooler.<region>.<cloud>.databricks.com |
트래픽만 읽습니다. 읽기 액세스가 사용하도록 설정된 고가용성 엔드포인트가 필요합니다. |
두 풀러 형식 모두 포트 5432를 사용합니다.
메모
Lakebase 앱의 Connect 대화 상자에서 직접 풀러 연결 문자열을 복사하여 엔드포인트, 지역 및 클라우드에 대한 올바른 호스트 이름을 얻으세요.
트랜잭션 모드 제한 사항
연결 풀러를 사용할 때는 다음 Postgres 기능을 사용할 수 없습니다.
SQL 수준 준비된 문:
PREPARE및DEALLOCATE문은 트랜잭션 모드에서 지원되지 않습니다. 드라이버 수준의 프리페어드 스테이트먼트(psycopg2, node-postgres, JDBC 및 유사한 라이브러리에서 내부적으로 사용됨)는 PgBouncer의 프로토콜 지원을 통해 정확하게 작동합니다. JDBC의 경우, 프리페어드 스테이트먼트와 관련된 오류가 표시되면, 명명된 서버 측 프리페어드 스테이트먼트 캐싱을 비활성화하기 위해prepareThreshold=0를 설정합니다.세션 수준 설정:
SET각 트랜잭션이 다른 서버 연결을 사용할 수 있으므로 명령은 트랜잭션 간에 유지되지 않습니다. 다음은 그 예입니다.BEGIN; SET search_path TO myschema; SELECT * FROM mytable; -- works in this transaction COMMIT; -- connection returns to pool after COMMIT SELECT * FROM mytable; -- ERROR: relation "mytable" does not exist설정을 영구적으로 적용하려면 다음을 대신 사용합니다
ALTER ROLE.ALTER ROLE myrole SET search_path TO myschema, public;세션 보유 임시 테이블: 트랜잭션 간에 지속되는 임시 테이블은 사용할 수 없습니다. 풀에 반환된 연결은 다음 트랜잭션에서 다른 클라이언트에 할당될 수 있습니다.
WITH HOLD커서: 영구 연결을 사용하여 선언된WITH HOLD커서는 지원되지 않습니다.권고 잠금: PgBouncer는 권고 잠금을 지원하지 않습니다. 권고 잠금에는 트랜잭션 모드에서 사용할 수 없는 영구 서버 연결이 필요합니다.
LISTEN/NOTIFY: 지원되지 않습니다. pub/sub 메시징이 필요한 애플리케이션에 대해 직접(풀링되지 않은) 연결을 사용합니다.pg_dump및 스키마 마이그레이션:pg_dump에 직접 연결하여 스키마 마이그레이션 및 세션 수준 상태를 사용하는 기타 도구에 사용합니다.
메모
세션 수준 Postgres 기능이 필요한 애플리케이션의 경우 Connect 대화 상자에서 연결 문자열을 직접 사용하고 연결 풀링 토글을 사용하지 않도록 설정합니다.
다음 단계
- 연결 문자열: 직접 연결에 대한 연결 문자열 형식 참조입니다. 연결 문자열을 참조하세요.
- Postgres 역할 만들기: 연결 풀링에 필요한 네이티브 Postgres 암호 역할을 만드는 방법입니다. Postgres 역할 만들기를 참조하세요.
- 인증 정보: OAuth 및 암호 인증 방법 비교 인증에 대해 참조하세요.