이 페이지에서는 데이터베이스에서 분할 지점을 만들고 관리하는 방법을 설명합니다. 예상되는 트래픽 증가에 대비하기 위해 데이터베이스를 사전 분할하는 분할 지점을 만들 수 있습니다. 사전 분할에 관한 자세한 내용은 사전 분할 개요를 참고하세요.
시작하기 전에
-
분할 지점을 만들고 관리하는 데 필요한 권한을 얻으려면 관리자에게 인스턴스에 대한 Cloud Spanner 데이터베이스 관리자(
roles/spanner.databaseAdmin
) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.이 사전 정의된 역할에는 분할 지점을 만들고 관리하는 데 필요한
spanner.databases.addSplitPoints
권한이 포함되어 있습니다. 이 페이지의 gcloud CLI 예시에서는 다음 가정이 사용됩니다.
- Spanner에 사용하도록 gcloud CLI를 설정했습니다. Spanner에서 gcloud CLI를 처음 사용하는 경우 gcloud CLI를 사용하여 데이터베이스 만들기 및 쿼리를 참조하세요.
프로젝트에 gcloud CLI를 구성했습니다. 예를 들면 다음과 같습니다.
gcloud config set core/project PROJECT_ID
예상되는 트래픽 증가를 지원하기에 충분한 노드가 Spanner 인스턴스에 있는지 확인합니다. 자세한 내용은 사전 분할 개요를 참조하세요.
분할 지점 만들기
Google Cloud CLI 또는 REST API를 사용하여 분할 지점을 만들 수 있습니다.
gcloud
Google Cloud CLI를 사용하여 분할 지점을 만들려면 모든 분할이 포함된 파일을 만들고 gcloud CLI 명령어에 경로를 제공해야 합니다. 파일은 API 요청당 100개 지점의 API 한도를 초과해서는 안 됩니다. 자세한 내용은 할당량 및 한도를 참조하세요.
파일은 다음 형식을 사용하여 분할 지점을 지정해야 합니다.
ObjectType ObjectName (SplitValue)
ObjectType ObjectName (SplitValue)
ObjectType ObjectName (SplitValue)
파일을 만들 때 다음 변수를 바꿉니다.
- ObjectType: 분할을 추가할 객체 유형입니다. 유효한 값은
TABLE
,INDEX
입니다. - ObjectName: 데이터베이스 테이블 또는 색인의 이름입니다.
- SplitValue: 분할을 도입할 분할 지점 값입니다.
파일에서 분할 지점 값을 만들 때 다음 규칙을 따르세요.
- 문자열 값은 작은따옴표로 묶어야 합니다. 예를 들면
'splitKeyPart'
입니다. - 불리언 값은
true
또는false
여야 합니다. INT64
및NUMERIC
Spanner 데이터 유형 값은 작은따옴표로 묶어야 합니다. 예를 들면'123'
또는'99.99'
입니다.- 다른 모든 숫자 값은 작은따옴표 없이 작성해야 합니다. 예를 들면
1.287
입니다. - 타임스탬프 값은 작은따옴표로 묶인
'2020-06-18T17:24:53Z'
형식으로 제공해야 합니다. - 분할 값은 괄호로 묶어야 합니다.
- 분할 키 값 순서는 기본 키 순서와 동일해야 합니다.
- 분할 값에 쉼표가 있어야 하는 경우 `\` 문자를 사용하여 쉼표를 이스케이프 처리해야 합니다.
- 색인을 분할하는 경우 색인 키 또는 전체 색인과 전체 테이블 키를 제공할 수 있습니다.
- 분할 지점을 지정할 때는 항상 전체 키를 사용해야 합니다.
다음은 분할 지점이 지정되는 방식을 보여주는 샘플 파일입니다.
TABLE Singers ('c32ca57a-786c-2268-09d4-95182a9930be')
TABLE Singers ('bb98c7e2-8240-b780-346d-c5d63886594a')
INDEX Order ('5b8bac71-0cb2-95e9-e1b0-89a027525460')
TABLE Payment ('6cf41f21-2d77-318f-c504-816f0068db8b')
INDEX Indx_A (2152120141932780000)
TABLE TableD (0,'7ef9d̦b22-d0e5-6041-8937-4bc6a7ef9db2')
INDEX IndexXYZ ('8762203435012030000',NULL,NULL)
INDEX IndexABC (0, '2020-06-18T17:24:53Z', '2020-06-18T17:24:53Z') TableKey
(123,'ab\,c')
아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.
- SPLITS_FILE: 분할 파일의 경로입니다.
- INSTANCE_ID: 인스턴스 ID
- DATABASE_ID: 데이터베이스 ID
-
EXPIRATION_DATE: (선택사항) 분할 지점의 만료일입니다.
'2020-06-18T17:24:53Z'
형식의 타임스탬프를 허용합니다. - INITIATOR: (선택사항) 분할 지점의 개시자입니다.
다음 명령어를 실행합니다.
Linux, macOS 또는 Cloud Shell
gcloud spanner databases splits add DATABASE_ID \ --splits-file=SPLITS_FILE \ --instance=INSTANCE_ID\ --split-expiration-date=EXPIRATION_DATE\ --initiator=INITIATOR\
Windows(PowerShell)
gcloud spanner databases splits add DATABASE_ID ` --splits-file=SPLITS_FILE ` --instance=INSTANCE_ID` --split-expiration-date=EXPIRATION_DATE` --initiator=INITIATOR`
Windows(cmd.exe)
gcloud spanner databases splits add DATABASE_ID ^ --splits-file=SPLITS_FILE ^ --instance=INSTANCE_ID^ --split-expiration-date=EXPIRATION_DATE^ --initiator=INITIATOR^
REST v1
projects.instances.databases.addSplitPoints
메서드를 사용하여 분할 지점을 만들 수 있습니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID
- INSTANCE_ID: 인스턴스 ID
- DATABASE_ID: 데이터베이스 ID
HTTP 메서드 및 URL:
POST https://spanner.googleapis.com/v1/projects//instances/ /databases/ :addSplitPoints
JSON 요청 본문:
{ "split_points": [ { "table": "T1", "index": "T1_IDX", "expire_time": "2023-04-22T10:00:20.021Z", "keys": [ { "key_parts": { "values": [ 3 ] } }, { "key_parts": { "values": [ 10 ] } } ] }, { "table": "T2", "expire_time": "2023-04-22T10:00:20.021Z", "keys": [ { "key_parts": { "values": [ 50 ] } } ] } ] }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
성공 상태 코드(2xx)와 빈 응답을 받게 됩니다.
클라이언트 라이브러리
Go
Java
Node.js
Python
발생 가능한 오류 시나리오
다음 시나리오에서는 분할 지점을 만들 때 오류가 발생할 수 있습니다.
- 색인 수준 분할의 입력에 잘못된 테이블 이름이 있습니다.
- 테이블 수준 분할 지점에 2개 이상의 키가 있습니다.
- 색인 수준 분할 지점에 3개 이상의 키가 있습니다.
- 분할 지점은 데이터베이스 스키마에 정의되지 않은 테이블 또는 색인에 정의됩니다.
- 요청에 중복 분할 지점이 포함되어 있습니다.
할당량 및 한도에 대한 자세한 내용은 할당량 및 한도를 참조하세요.
분할 지점 보기
Google Cloud 콘솔 또는 gcloud CLI를 사용하여 데이터베이스에서 생성된 모든 분할 지점을 볼 수 있습니다.
콘솔
Google Cloud 콘솔에서 SPANNER_SYS.USER_SPLIT_POINTS
뷰를 쿼리하여 분할 지점 수를 가져오려면 다음 단계를 따르세요.
Spanner 인스턴스 페이지를 엽니다.
Spanner 인스턴스의 이름과 쿼리할 데이터베이스를 선택합니다.
왼쪽 탐색 패널에서 Spanner 스튜디오를 클릭합니다.
텍스트 필드에 다음 쿼리를 입력합니다.
SELECT * FROM SPANNER_SYS.USER_SPLIT_POINTS
쿼리 실행을 클릭합니다.
다음과 유사한 결과가 표시됩니다.
TABLE_NAME | INDEX_NAME | INITIATOR | SPLIT_KEY | EXPIRE_TIME |
---|---|---|---|---|
T | CloudAddSplitPointsAPI | T(90,153,4,2024-04-30T17:00:00-07:00,1,2024-05-01,a) | 2025-03-06T09:58:58.007201Z | |
T | T_IDX | CloudAddSplitPointsAPI | 색인: T의 T_IDX, 색인 키: (10), 기본 테이블 키: (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>) | 2025-03-08T07:33:23.861682Z |
T | T_IDX | CloudAddSplitPointsAPI | 색인: T의 T_IDX, 색인 키: (9091), 기본 테이블 키: (4567,123,4.2,2024-04-30T17:00:00-07:00,1,2024-05-01,a) | 2025-03-08T07:35:25.990007Z |
gcloud
다음 gcloud CLI 명령어를 실행하여 데이터베이스의 분할 지점을 확인합니다.
gcloud spanner databases splits list DATABASE_ID \
--instance INSTANCE_ID
이 명령어를 실행할 때 다음 변수를 바꿉니다.
- INSTANCE_ID: Spanner 인스턴스 ID입니다.
- DATABASE_ID: Spanner 데이터베이스 ID입니다.
다음과 유사한 응답이 표시됩니다.
TABLE_NAME: T
INDEX_NAME:
INITIATOR: CloudAddSplitPointsAPI
SPLIT_KEY: T(90,153,4,2024-04-30T17:00:00-07:00,1,2024-05-01,a)
EXPIRE_TIME: 2025-03-06T09:58:58.007201Z
TABLE_NAME: T
INDEX_NAME: T_IDX
INITIATOR: CloudAddSplitPointsAPI
SPLIT_KEY: Index: T_IDX on T, Index Key: (10), Primary Table Key: (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>)
EXPIRE_TIME: 2025-03-08T07:33:23.861682Z
TABLE_NAME: T
INDEX_NAME: T_IDX
INITIATOR: CloudAddSplitPointsAPI
SPLIT_KEY: Index: T_IDX on T, Index Key: (9091), Primary Table Key: (4567,123,4.2,2024-04-30T17:00:00-07:00,1,2024-05-01,a)
EXPIRE_TIME: 2025-03-08T07:35:25.990007Z
분할 지점을 만료하는 방법
만드는 각 분할 지점에 만료 시간을 설정할 수 있습니다. 자세한 내용은 분할 지점 만료를 참고하세요. Google Cloud CLI 또는 REST API를 사용하여 분할 지점을 만료할 수 있습니다.
gcloud
Google Cloud CLI에서 분할 지점을 만료하려면 만료하려는 모든 분할이 포함된 파일을 만들고 gcloud CLI 명령어에서 splits-file
파라미터를 사용하여 경로를 제공해야 합니다. 파일은 API 요청당 100개 지점의 API 한도를 초과해서는 안 됩니다. 자세한 내용은 할당량 및 한도를 참조하세요.
파일은 다음 형식을 사용하여 분할 지점을 지정해야 합니다.
ObjectType ObjectName (SplitValue)
ObjectType ObjectName (SplitValue)
ObjectType ObjectName (SplitValue)
파일을 만들 때 다음 변수를 바꿉니다.
- ObjectType: 만료하려는 분할의 객체 유형입니다. 유효한 값은
TABLE
,INDEX
입니다. - ObjectName: 데이터베이스 테이블 또는 색인의 이름입니다.
- SplitValue: 만료하려는 분할 지점 값입니다.
파일에서 분할 지점 값을 만들 때 다음 규칙을 따르세요.
- 문자열 값은 작은따옴표로 묶어야 합니다. 예를 들면
'splitKeyPart'
입니다. - 불리언 값은
true
또는false
일 수 있습니다. INT64
및NUMERIC
Spanner 데이터 유형 값은 작은따옴표로 묶어야 합니다. 예를 들면'123'
또는'99.99'
입니다.- 다른 모든 숫자 값은 작은따옴표 없이 작성해야 합니다. 예를 들면
1.287
입니다. - 타임스탬프 값은 작은따옴표로 묶인
'2020-06-18T17:24:53Z'
형식으로 제공해야 합니다. - 분할 값은 괄호로 묶어야 합니다.
- 분할 키 값 순서는 기본 키 순서와 동일해야 합니다.
- 분할 값에 쉼표가 있어야 하는 경우 `\` 문자를 사용하여 쉼표를 이스케이프 처리해야 합니다.
- 색인을 분할하는 경우 색인 키 또는 전체 색인과 전체 테이블 키를 제공할 수 있습니다.
- 분할 지점을 지정할 때는 항상 전체 키를 사용해야 합니다.
다음은 분할 지점이 지정되는 방식을 보여주는 샘플 파일입니다.
TABLE Singers ('c32ca57a-786c-2268-09d4-95182a9930be')
TABLE Singers ('bb98c7e2-8240-b780-346d-c5d63886594a')
INDEX Order ('5b8bac71-0cb2-95e9-e1b0-89a027525460')
TABLE Payment ('6cf41f21-2d77-318f-c504-816f0068db8b')
INDEX Indx_A (2152120141932780000)
TABLE TableD (0,'7ef9db22-d0e5-6041-8937-4bc6a7ef9db2')
INDEX IndexXYZ ('8762203435012030000',NULL,NULL)
INDEX IndexABC (0, '2020-06-18T17:24:53Z', '2020-06-18T17:24:53Z') TableKey
(123,'ab\,c')
아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.
- SPLITS_FILE: 분할 파일의 경로입니다.
- INSTANCE_ID: 인스턴스 ID
- DATABASE_ID: 데이터베이스 ID
-
EXPIRATION_DATE: (선택사항) 분할 지점의 만료일입니다.
'2020-06-18T17:24:53Z'
형식의 타임스탬프를 허용합니다. - INITIATOR: (선택사항) 분할 지점의 개시자입니다.
다음 명령어를 실행합니다.
Linux, macOS 또는 Cloud Shell
gcloud spanner databases splits add DATABASE_ID \ --splits-file=SPLITS_FILE \ --instance=INSTANCE_ID\ --split-expiration-date=EXPIRATION_DATE\ --initiator=INITIATOR\
Windows(PowerShell)
gcloud spanner databases splits add DATABASE_ID ` --splits-file=SPLITS_FILE ` --instance=INSTANCE_ID` --split-expiration-date=EXPIRATION_DATE` --initiator=INITIATOR`
Windows(cmd.exe)
gcloud spanner databases splits add DATABASE_ID ^ --splits-file=SPLITS_FILE ^ --instance=INSTANCE_ID^ --split-expiration-date=EXPIRATION_DATE^ --initiator=INITIATOR^
REST v1
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID
- INSTANCE_ID: 인스턴스 ID
- DATABASE_ID: 데이터베이스 ID
HTTP 메서드 및 URL:
POST https://spanner.googleapis.com/v1/projects//instances/ /databases/ :addSplitPoints
JSON 요청 본문:
{ "split_points": [ { "table": "T1", "index": "T1_IDX", "expire_time": "2023-04-22T10:00:20.021Z", "keys": [ { "key_parts": { "values": [ 3 ] } }, { "key_parts": { "values": [ 10 ] } } ] }, { "table": "T2", "expire_time": "2023-04-22T10:00:20.021Z", "keys": [ { "key_parts": { "values": [ 50 ] } } ] } ] }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
성공 상태 코드(2xx)와 빈 응답을 받게 됩니다.