このページでは、データベースで分割ポイントを作成して管理する方法について説明します。分割ポイントを作成してデータベースを事前に分割し、予想されるトラフィックの増加に備えることができます。事前分割の詳細については、事前分割の概要をご覧ください。
始める前に
-
分割ポイントの作成と管理に必要な権限を取得するには、インスタンスに対する 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 つ以上のキーがある。
- データベース スキーマで定義されていないテーブルまたはインデックスで分割ポイントが定義されている。
- リクエストに重複する分割ポイントが含まれている。
割り当てと上限については、割り当てと上限をご覧ください。
分割点を確認する
データベースに作成されたすべての分割ポイントは、Google Cloud コンソールまたは gcloud CLI を使用して確認できます。
コンソール
Google Cloud コンソールで SPANNER_SYS.USER_SPLIT_POINTS
ビューをクエリして分割ポイント数を取得する手順は次のとおりです。
[Spanner インスタンス] ページを開きます。
クエリを実行する Spanner インスタンスとデータベースの名前を選択します。
左側のナビゲーション パネルで [Spanner Studio] をクリックします。
テキスト フィールドに次のクエリを入力します。
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 | Index: T_IDX on T, Index Key: (10), Primary Table Key: (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>) | 2025-03-08T07:33:23.861682Z |
T | T_IDX | CloudAddSplitPointsAPI | 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) | 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)と空のレスポンスが返されます。