이 페이지에서는 Spanner 읽기 임대를 사용하는 방법을 설명합니다. 읽기 리스는 데이터베이스가 강력한 일관성이 필요한 트랜잭션에 대해 리더가 아닌 리전에서 읽기 지연 시간을 줄이는 데 도움이 됩니다.
기본적으로 Spanner가 리더가 아닌 리전에서 강력 읽기 요청을 수신하면 읽기를 제공하는 복제본이 인스턴스의 리더 읽기-쓰기 리전에 연결됩니다. 이 연락처는 요청을 처리하기 전에 데이터가 최신 상태인지 확인합니다. 이 프로세스에서는 요청을 수신하는 리전과 리더 리전 간에 네트워크 왕복이 발생합니다. 단일 리전 내 통신과 달리 리전 간 지리적 거리는 요청에 추가 지연 시간을 더합니다.
Spanner 읽기 임대를 사용하면 이러한 왕복이 필요하지 않습니다. 데이터베이스에 하나 이상의 읽기 임대 리전을 설정하면 Spanner에서 하나 이상의 비리더, 읽기-쓰기 또는 읽기 전용 리전에 로컬로 읽기를 제공할 권한을 부여합니다. 이렇게 하면 리더 리전과 통신하지 않고도 리더가 아닌 리전에서 강력한 읽기를 직접 제공할 수 있습니다. 클라이언트에 더 가까운 리더가 아닌 리전에서 강력 읽기를 제공하면 리전 간 지연 시간이 줄어듭니다. 이렇게 하면 이중 리전 또는 멀티 리전 인스턴스에서 강력한 읽기의 리전 내 지연 시간이 달성됩니다.
리전에서 읽기 임대 기능을 사용 설정하거나 사용 중지하는 데는 다운타임이 필요하지 않습니다. 하지만 이 기능을 사용하면 쓰기 지연 시간이 길어집니다. 읽기 임대를 사용 설정하면 리더가 쓰기를 제공할 때 읽기 임대 리전에 연락해야 하기 때문입니다. 부작용으로 쓰기가 더 오래 잠금을 유지하므로 경합이 심한 쓰기 워크로드에 영향을 줄 수 있습니다. 자세한 내용은 읽기 임대를 사용하는 경우를 참고하세요. 읽기 임대는 쓰기 지연 시간 증가와 빠른 강력한 읽기를 교환하려는 애플리케이션에 가장 적합합니다. 예를 들어 워크로드에서 읽기는 자주 발생하지만 쓰기는 드물게 발생하는 액세스 제어 시스템이 있습니다.
리더가 아닌 리전에서 읽기 리스를 사용 설정하는 방법을 알아보려면 읽기 리스 사용을 참고하세요.
읽기 리스를 사용해야 하는 경우
애플리케이션과 워크로드가 다음 기준을 충족하는 경우 읽기 임대를 사용 설정하세요.
- 강력한 읽기의 짧은 지연 시간이 쓰기의 짧은 지연 시간보다 더 중요합니다.
- 워크로드가 더 긴 쓰기 잠금 기간을 허용하거나 쓰기 경합이 적습니다.
읽기 임대를 사용 설정하면 쓰기 지연 시간이 늘어나 쓰기 잠금이 더 오래 유지됩니다. 쓰기 워크로드에 이미 쓰기 경합이 많은 경우 이 기능으로 인해 쓰기 지연 시간이 악화되고 처리량이 감소할 수 있습니다.
동시 쓰기가 있는 경우 쿼리 API를 사용할지 읽기 API를 사용할지에 따라 읽기 임대 리전을 사용하는 데이터베이스의 성능이 달라집니다.
Spanner에서 SQL 문을 실행하려면 여러 행 또는 범위에서 데이터를 읽어야 합니다. 읽기 임대가 사용 설정된 쿼리 API를 사용하는 경우 읽기는 정확성을 위해 동시 쓰기를 기다려야 합니다. 따라서 특히 쓰기 부하가 많은 경우 지연 시간이 길어질 수 있습니다. 읽기 API는 일반적으로 쿼리 API보다 동시 쓰기에 더 관대합니다. 쓰기 부하가 높은 쿼리 API를 자주 사용하는 경우 쓰기 빈도를 줄이거나 오래된 읽기를 대신 사용하는 것이 좋습니다.
읽기 API는 특정 행 또는 데이터 범위를 읽는 데 최적화되어 있습니다. 읽으려는 정확한 데이터를 수정하는 쓰기만 기다리면 됩니다. 읽기 API를 사용하는 경우 정확히 동일한 데이터 범위에 대한 쓰기만 읽기를 차단합니다. 따라서 동시 쓰기가 있고 읽기 임대 리전을 사용하는 경우 Spanner 강력 읽기가 더 나은 성능을 보이고 지연 시간이 짧습니다.
지연 시간 모니터링에 대해 자세히 알아보려면 모니터링을 참고하세요.
사용 사례
미국에서 쓰기를 실행하고 미국, 유럽, 아시아에 클라이언트가 있는 전역적으로 배포된 애플리케이션을 생각해 보세요. 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을 데이터베이스의 고유 식별자로 바꿉니다.
읽기 리스 사용 설정
새 데이터베이스를 만들 때 읽기 리스를 사용 설정하려면 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 복제 자세히 알아보기
- 트랜잭션 외부에서 읽기에 대해 자세히 알아보세요.