이 페이지에서는 Spanner 읽기 임대를 사용하는 방법을 설명합니다. 읽기 임대는 데이터베이스가 쓰기 지연 시간이 증가하는 대신 읽기-쓰기 또는 읽기 전용 리전에서 강력한 읽기 지연 시간을 줄이는 데 도움이 됩니다.
기본적으로 Spanner가 리더가 아닌 리전에서 강력 읽기 요청을 수신하면 읽기를 제공하는 복제본이 인스턴스의 리더 읽기-쓰기 리전에 연결됩니다. 이 연락처는 요청을 처리하기 전에 데이터가 최신 상태인지 확인합니다. 이 프로세스에서는 요청을 수신하는 리전과 리더 리전 간에 네트워크 왕복이 발생합니다. 단일 리전 내 통신과 달리 리전 간 지리적 거리는 요청에 추가 지연 시간을 더합니다.
Spanner 읽기 임대를 사용하면 이러한 왕복이 필요하지 않습니다. 데이터베이스에 하나 이상의 읽기 임대 리전을 설정하면 Spanner에서 해당 리전에 일관된 읽기를 로컬로 제공할 권한을 부여합니다. 이렇게 하면 리더가 아닌 리전이 리더 리전과 통신하지 않고도 강력한 읽기를 직접 제공할 수 있습니다. 클라이언트에 더 가까운 리더가 아닌 리전에서 강력한 읽기를 제공하면 리전 간 지연 시간이 줄어듭니다. 이렇게 하면 이중 리전 또는 멀티 리전 인스턴스에서 강력한 읽기를 위한 리전 내 지연 시간이 달성됩니다. 읽기 리스가 사용 설정된 경우 읽기 전용 트랜잭션 내의 강력한 읽기는 리더에 문의하지 않고 로컬로 제공됩니다. 읽기-쓰기 트랜잭션의 경우 리더 인식 라우팅을 사용 중지한 상태에서 반복 가능한 읽기 격리를 사용하지 않는 한 읽기는 여전히 리더 리전으로 전달됩니다.
리전에서 읽기 임대 기능을 사용 설정하거나 사용 중지하는 데는 다운타임이 필요하지 않습니다. 하지만 이 기능을 사용하면 쓰기 지연 시간이 길어집니다. 읽기 임대를 사용 설정하면 리더가 쓰기를 제공할 때 읽기 임대 리전에 연락해야 하기 때문입니다. 부작용으로 쓰기가 더 오래 잠금을 유지하므로 경합이 심한 쓰기 워크로드에 영향을 줄 수 있습니다. 자세한 내용은 읽기 임대를 사용하는 경우를 참고하세요. 읽기 임대는 쓰기 지연 시간 증가와 빠른 강력한 읽기를 교환하려는 애플리케이션에 가장 적합합니다. 예를 들어 워크로드에서 읽기는 자주 발생하지만 쓰기는 드물게 발생하는 액세스 제어 시스템이 있습니다.
읽기 임대를 사용 설정하는 방법을 알아보려면 읽기 임대 사용을 참고하세요.
읽기 리스를 사용해야 하는 경우
애플리케이션과 워크로드가 다음 기준을 충족하는 경우 읽기 임대를 사용 설정하세요.
- 강력한 읽기의 짧은 지연 시간이 쓰기의 짧은 지연 시간보다 더 중요합니다.
- 워크로드가 더 긴 쓰기 잠금 기간을 허용하거나 쓰기 경합이 적습니다.
동시 쓰기가 있는 경우 쿼리 API를 사용할지 읽기 API를 사용할지에 따라 읽기 임대 리전을 사용하는 데이터베이스의 성능이 달라집니다.
지연 시간 모니터링에 대해 자세히 알아보려면 모니터링을 참고하세요.
사용 사례
미국에서 쓰기를 실행하고 미국, 유럽, 아시아에 클라이언트가 있는 전역적으로 배포된 애플리케이션을 생각해 보세요. us-central1
에 리더 리전이 있고 europe-west1
및 asia-east1
에 읽기 전용 복제본이 있는 멀티 리전 Spanner 인스턴스(예: nam-eur-asia1
)를 구성할 수 있습니다.
europe-west1
및 asia-east1
읽기 전용 리전에서 읽기 임대를 사용 설정하면 Spanner는 해당 로컬 복제본에서 유럽과 아시아의 강력한 읽기를 제공하여 지연 시간을 줄입니다. 단점은 모든 쓰기의 쓰기 지연 시간이 증가한다는 점입니다. 지연 시간 증가는 리더 us-central1
리전과 가장 먼 읽기 임대 리전 간의 왕복 시간과 동일합니다.
제한사항
Spanner 읽기 임대에는 다음과 같은 제한사항이 있습니다.
- 지역 파티셔닝에는 읽기 임대를 사용할 수 없습니다.
- 읽기 리스는 읽기-쓰기 트랜잭션의 일부인 읽기의 지연 시간을 줄이지 않습니다. 읽기-쓰기 트랜잭션 내에서 읽기의 리전 내 지연 시간을 달성하려면 반복 가능한 읽기 격리 수준을 사용하고 리더 인식 라우팅을 사용 중지하여 읽기 임대를 사용해야 합니다. 반복 가능한 읽기 격리를 사용하는 경우에도 읽기-쓰기 트랜잭션의 읽기는 특히 트랜잭션 내에서 쓰기가 발생한 후 읽기-쓰기 일관성을 보장하기 위해 리더 리전으로 전달될 수 있습니다.
- 인스턴스를 다른 인스턴스 구성으로 이동하면 읽기 임대 설정이 유지되지 않습니다. 이동이 완료된 후 데이터베이스에서 읽기 임대를 다시 사용 설정해야 합니다.
읽기 임대 사용
이 기능을 사용하려면 먼저 읽기 임대를 사용 설정해야 합니다.
IAM으로 액세스 제어
임대 리전 읽기를 설정하려면 사용자에게 spanner.databases.create
또는 spanner.databases.updateDdl
IAM 권한이 필요합니다. 사전 정의된 데이터베이스 관리자 역할 (roles/spanner.databaseAdmin
)에는 이러한 권한이 포함되어 있습니다. 자세한 내용은 Spanner용 IAM 개요를 참고하세요.
권한을 부여하는 방법은 IAM 권한 적용을 참고하세요.
PostgreSQL 데이터베이스 사용자를 위한 시작 전 준비사항
PostgreSQL 데이터베이스에서 읽기 리스를 사용하려면 데이터베이스를 다음과 같이 구성하세요. 그렇지 않으면 읽기 임대 리전을 설정한 경우에도 읽기는 여전히 리더 리전에서 제공됩니다.
읽기 전용 트랜잭션만 사용하는 경우 데이터베이스의 각 새 트랜잭션의 기본 상태가 읽기 전용으로 설정되도록 PostgreSQL 연결을 구성합니다. 이렇게 하려면
default_transaction_read_only
옵션을true
로 설정하세요.postgres://USER_ID:PASSWORD@localhost:5432/DATABASE_ID?sslmode=disable&options=-c \ default_transaction_read_only=true host=/tmp port=5432 database=DATABASE_ID \ options='-c default_transaction_read_only=true'
다음을 바꿉니다.
USER_ID를 사용자의 고유 식별자로 바꿉니다.
PASSWORD을 비밀번호로 바꿉니다.
DATABASE_ID을 데이터베이스의 고유 식별자로 바꿉니다.
읽기-쓰기 트랜잭션 내에서 리전 내 지연 시간 읽기를 달성하거나 연결 옵션을 항상 전환할 수 없는 경우 반복 가능한 읽기 격리 수준을 사용하고 리더 인식 라우팅을 사용 중지하세요. 읽기-쓰기 트랜잭션에 읽기만 있는 경우에도 이러한 설정이 필요합니다. 그렇지 않으면 읽기-쓰기 트랜잭션 내의 읽기는 항상 리더 리전으로 전달됩니다. 이러한 트랜잭션에서는 첫 번째 쓰기 DML 문이 표시된 후 읽기 임대가 사용 중지됩니다. 쓰기는 항상 리더 리전으로 전달되기 때문입니다. 따라서 쓰기를 읽으려면 후속 읽기도 리더 리전으로 이동해야 합니다.
postgres://USER_ID:PASSWORD@localhost:5432/DATABASE_ID?sslmode=disable&options=-c \ default_isolation_level=REPEATABLE_READ -c routeToLeader=false host=/tmp port=5432 database=DATABASE_ID \ options='-c default_isolation_level=REPEATABLE_READ -c routeToLeader=false'
읽기 리스 사용 설정
새 데이터베이스를 만들 때 읽기 리스를 사용 설정하려면 ALTER DATABASE
(GoogleSQL, PostgreSQL) DDL 문의 read_lease_regions
옵션을 설정합니다.
콘솔
Google Cloud 콘솔에서 인스턴스 페이지로 이동합니다.
읽기 임대를 사용 설정할 인스턴스를 선택합니다.
표시된 인스턴스 개요 페이지에서 데이터베이스 만들기를 클릭합니다.
데이터베이스 이름으로 이름을 입력합니다.
데이터베이스 언어를 선택합니다.
만들기를 클릭합니다.
Google Cloud 콘솔에 생성된 데이터베이스의 개요 페이지가 표시됩니다.
탐색 메뉴에서 Spanner 스튜디오를 클릭합니다.
Spanner 스튜디오 페이지에서
새 탭을 클릭하거나 비어 있는 편집기 탭을 사용합니다.다음
ALTER DATABASE
DDL 문을 입력합니다.GoogleSQL
ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
다음을 바꿉니다.
DATABASE_ID을 데이터베이스의 고유 식별자로 바꿉니다.
READ_LEASE_REGION을 읽기 임대를 사용 설정할 리전으로 바꿉니다. 예를 들면
europe-west1
입니다. 여러 리전에 대해 읽기 임대를 사용 설정할 수 있습니다. 각 지역은 쉼표로 구분합니다.
PostgreSQL
ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
다음을 바꿉니다.
DATABASE_ID을 데이터베이스의 고유 식별자로 바꿉니다.
READ_LEASE_REGION을 읽기 임대를 사용 설정할 리전으로 바꿉니다. 예를 들면
europe-west1
입니다. 여러 리전에 대해 읽기 임대를 사용 설정할 수 있습니다. 각 지역은 쉼표로 구분합니다.
실행을 클릭합니다.
gcloud
데이터베이스를 만들 때 read_lease_regions
데이터베이스 옵션을 설정하려면 gcloud spanner databases create
를 사용합니다.
GoogleSQL
gcloud spanner databases create DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');"
다음을 바꿉니다.
DATABASE_ID
: Spanner 데이터베이스의 영구 식별자입니다.INSTANCE_ID
: Spanner 인스턴스의 영구 식별자입니다.READ_LEASE_REGION
: 읽기 임대를 사용 설정할 리전입니다. 예를 들면europe-west1
입니다. 여러 리전에 대해 읽기 임대를 사용 설정할 수 있습니다. 각 지역은 쉼표로 구분합니다.
PostgreSQL
gcloud spanner databases create DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID \
SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"
다음을 바꿉니다.
DATABASE_ID
: Spanner 데이터베이스의 영구 식별자입니다.INSTANCE_ID
: Spanner 인스턴스의 영구 식별자입니다.READ_LEASE_REGION
: 읽기 임대를 사용 설정할 리전입니다. 예를 들면europe-west1
입니다. 여러 리전에 대해 읽기 임대를 사용 설정할 수 있습니다. 각 지역은 쉼표로 구분합니다.
기존 데이터베이스를 업데이트할 때 읽기 리스를 사용 설정하려면 ALTER DATABASE
(GoogleSQL, PostgreSQL) DDL 문에서 read_lease_regions
옵션을 설정하세요.
콘솔
Google Cloud 콘솔에서 인스턴스 페이지로 이동합니다.
읽기 임대를 사용 설정할 인스턴스를 선택합니다.
읽기 임대를 사용 설정할 데이터베이스를 선택합니다.
탐색 메뉴에서 Spanner 스튜디오를 클릭합니다.
Spanner 스튜디오 페이지에서
새 탭을 클릭하거나 비어 있는 편집기 탭을 사용합니다.다음
ALTER DATABASE
DDL 문을 입력합니다.GoogleSQL
ALTER DATABASE DATABASE_ID \ SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
다음을 바꿉니다.
DATABASE_ID을 데이터베이스의 고유 식별자로 바꿉니다.
READ_LEASE_REGION을 읽기 임대를 사용 설정할 리전으로 바꿉니다. 예를 들면
europe-west1
입니다. 여러 리전에 대해 읽기 임대를 사용 설정할 수 있습니다. 각 지역은 쉼표로 구분합니다.
PostgreSQL
ALTER DATABASE DATABASE_ID \ SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
다음을 바꿉니다.
DATABASE_ID을 데이터베이스의 고유 식별자로 바꿉니다.
READ_LEASE_REGION을 읽기 임대를 사용 설정할 리전으로 바꿉니다. 예를 들면
europe-west1
입니다. 여러 리전에 대해 읽기 임대를 사용 설정할 수 있습니다. 각 지역은 쉼표로 구분합니다.
실행을 클릭합니다.
gcloud
read_lease_regions
데이터베이스 옵션을 설정하려면 gcloud spanner databases ddl update
를 사용합니다.
GoogleSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID \
SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');"
다음을 바꿉니다.
DATABASE_ID
: Spanner 데이터베이스의 영구 식별자입니다.INSTANCE_ID
: Spanner 인스턴스의 영구 식별자입니다.- READ_LEASE_REGION을 읽기 임대를 사용 설정할 리전으로 바꿉니다. 예를 들면
europe-west1
입니다. 여러 리전에 대해 읽기 임대를 사용 설정할 수 있습니다. 각 지역은 쉼표로 구분합니다.
PostgreSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID \
SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"
다음을 바꿉니다.
DATABASE_ID
: Spanner 데이터베이스의 영구 식별자입니다.INSTANCE_ID
: Spanner 인스턴스의 영구 식별자입니다.- READ_LEASE_REGION을 읽기 임대를 사용 설정할 리전으로 바꿉니다. 예를 들면
europe-west1
입니다. 여러 리전에 대해 읽기 임대를 사용 설정할 수 있습니다. 각 지역은 쉼표로 구분합니다.
읽기 리스 사용 중지
읽기 임대는 기본적으로 사용 중지되어 있습니다.
기존 데이터베이스에서 이 기능을 업데이트하고 사용 중지하려면 ALTER DATABASE
(GoogleSQL, PostgreSQL) DDL 문의 read_lease_regions
옵션을 NULL
로 설정합니다.
콘솔
Google Cloud 콘솔에서 인스턴스 페이지로 이동합니다.
읽기 임대를 사용 중지할 인스턴스를 선택합니다.
읽기 임대를 사용 중지할 데이터베이스를 선택합니다.
탐색 메뉴에서 Spanner 스튜디오를 클릭합니다.
Spanner 스튜디오 페이지에서
새 탭을 클릭하거나 비어 있는 편집기 탭을 사용합니다.다음
ALTER DATABASE
DDL 문을 입력합니다.GoogleSQL
ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = NULL);
DATABASE_ID를 데이터베이스의 고유 식별자로 바꿉니다.
PostgreSQL
ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;
DATABASE_ID를 데이터베이스의 고유 식별자로 바꿉니다.
실행을 클릭합니다.
gcloud
read_lease_regions
데이터베이스 옵션을 설정하려면 gcloud spanner databases ddl update
를 사용합니다.
GoogleSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = NULL);"
다음을 바꿉니다.
DATABASE_ID
: Spanner 데이터베이스의 영구 식별자INSTANCE_ID
: Spanner 인스턴스의 영구 식별자
PostgreSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;"
다음을 바꿉니다.
DATABASE_ID
: Spanner 데이터베이스의 영구 식별자INSTANCE_ID
: Spanner 인스턴스의 영구 식별자
권장사항
이 기능의 이점을 극대화하려면 단일 세션에서 다수의 동시 요청을 만들 수 있는 다중화 세션을 사용하세요.
모니터링
읽기 임대를 사용 설정한 후에는 지연 시간을 모니터링하여 기능이 의도한 효과를 달성하는지 확인하는 것이 중요합니다. 이렇게 하려면 data_options
정보 스키마 테이블 (GoogleSQL, PostgreSQL) 또는 데이터베이스를 쿼리하여 리더 리전과 읽기 임대가 사용 설정된 리전을 식별합니다. 읽기 임대가 사용 설정된 리전에서는 강력한 읽기에 리전 내 지연 시간이 있을 것으로 예상합니다. 동시에 쓰기 지연 시간은 리더 리전과 읽기 임대가 사용 설정된 가장 먼 리전 간의 왕복 시간만큼 증가합니다.
다음 Spanner 지연 시간 측정항목을 사용하여 인스턴스의 읽기 요청 지연 시간을 모니터링할 수도 있습니다.
spanner.googleapis.com/api/read_request_latencies_by_serving_location
/serving_location
필드를 사용하여 이 측정항목을 필터링할 수 있습니다. /serving location
필드는 요청이 제공되는 Spanner 서버의 위치를 나타냅니다.
사용 가능한 측정항목의 전체 목록은 Spanner 측정항목 목록을 참조하세요.
비용 고려사항
읽기 임대 기능이 사용 설정된 리전에서 제공되는 강력한 읽기는 컴퓨팅 리소스를 약간 적게 사용합니다. 반면 읽기 임대 기능이 사용 설정된 데이터베이스의 쓰기는 컴퓨팅 리소스를 약간 더 많이 사용합니다. 자세한 내용은 Spanner 컴퓨팅 용량 가격 책정을 참고하세요.
이 기능은 스토리지 및 네트워크와 같은 다른 가격 구성요소에는 영향을 미치지 않습니다.
다음 단계
- Spanner 복제 자세히 알아보기
- 트랜잭션 외부에서 읽기에 대해 자세히 알아보세요.