DB シャードグループ内のシャードの分割
DB シャードグループのシャードは、手動で 2 つの小さなシャードに分割できます。これは、ユーザー開始のシャード分割と呼ばれます。
Aurora PostgreSQL Limitless Database は、データ量が非常に多いか、使用量が非常に多い場合にシャードを分割することもできます。これは、システム開始のシャード分割と呼ばれます。
前提条件
ユーザー開始のシャード分割には、次の前提条件があります。
-
DB シャードグループが必要です。
-
DB シャードグループは空にすることはできません。少なくとも 1 つのシャードテーブルが含まれている必要があります。
-
ユーザーには
rds_aurora_limitless_cluster_admin
権限が必要です。rds_superuser
にはこの権限があるため、マスターユーザーにも権限があります。rds_superuser
は、他のユーザーに権限を付与できます。/* Logged in as the master user or a user with rds_superuser privileges */ CREATE USER
username
; GRANT rds_aurora_limitless_cluster_admin tousername
; -
分割するシャードのサブクラスター (ノード) ID を知っている必要があります。次のクエリを使用して、ID を取得できます。
SELECT * FROM rds_aurora.limitless_subclusters; subcluster_id | subcluster_type ---------------+----------------- 1 | router 2 | router 3 | shard 4 | shard 5 | shard 6 | shard
システム開始のシャード分割を有効にするには、DB クラスターに関連付けられたカスタム DB クラスターパラメータグループに次の DB クラスターパラメータを設定します。
パラメータ | 値 |
---|---|
|
|
|
|
|
このパラメータは、システム開始のシャード分割を確定する方法を決定します。値は次のいずれかになります:
詳細については、「シャード分割の確定」を参照してください。 注記このパラメータは、システム開始のシャード分割にのみ適用されます。 |
詳細については、「Amazon Aurora DB クラスターの DB クラスターパラメータグループ」を参照してください。
シャードの分割
DB シャードグループ内のシャードを分割するには、rds_aurora.limitless_split_shard
関数を使用します。この関数は、非同期的に実行されるシャード分割ジョブを開始します。
SELECT rds_aurora.limitless_split_shard('
subcluster_id
');
ジョブが正常に送信されたら、ジョブ ID が返されるまで待ちます。次に例を示します。
SELECT rds_aurora.limitless_split_shard('3'); job_id --------------- 1691300000000 (1 row)
注記
同時シャード分割オペレーションはサポートされていません。各オペレーションを順番に実行し、各オペレーションを完了してから別の追加オペレーションを開始します。
シャード分割の追跡
ジョブ ID を使用して、シャード分割ジョブを追跡できます。特定のジョブを記述して詳細を取得するには、次のクエリを実行します。
SELECT * FROM rds_aurora.limitless_list_shard_scale_jobs(
job_id
);
例:
SELECT * FROM rds_aurora.limitless_list_shard_scale_jobs(1691300000000); job_id | action | job_details | status | submission_time | message ---------------+-------------+-----------------------+---------+------------------------+------------------------------------------- 1691300000000 | SPLIT_SHARD | Split Shard 3 by User | SUCCESS | 2023-08-06 05:33:20+00 | Scaling job succeeded. + | | | | | New shard instance with ID 7 was created. (1 row)
存在しないジョブを入力として渡すと、クエリはエラーを返します。
SELECT * from rds_aurora.limitless_list_shard_scale_jobs(1691300000001); ERROR: no job found with the job ID provided
ジョブ ID なしで同じクエリを使用して、すべてのシャード分割ジョブのステータスを追跡できます。次に例を示します。
SELECT * FROM rds_aurora.limitless_list_shard_scale_jobs(); job_id | action | job_details | status | submission_time | message ---------------+-------------+-----------------------+-------------+------------------------+-------------------------------------------------------------- 1691200000000 | SPLIT_SHARD | Split Shard 3 by User | IN_PROGRESS | 2023-08-05 01:46:40+00 | 1691300000000 | SPLIT_SHARD | Split Shard 4 by User | SUCCESS | 2023-08-06 05:33:20+00 | Scaling job succeeded. + | | | | | New shard instance with ID 7 was created. 1691400000000 | SPLIT_SHARD | Split Shard 5 by User | FAILED | 2023-08-07 09:20:00+00 | Error occurred for the add shard job 1691400000000. | | | | | Retry the command. If the issue persists, contact AWS Support. 1691500000000 | SPLIT_SHARD | Split Shard 5 by User | CANCELED | 2023-08-07 09:20:00+00 | Scaling job was cancelled. (4 rows)
ジョブステータスは以下のいずれかになります。
-
IN_PROGRESS
– シャード分割ジョブが送信され、進行中です。一度に進行中のジョブは 1 つだけです。 -
PENDING
– シャード分割ジョブは確定を待っています。詳細については、「シャード分割の確定」を参照してください。 -
CANCELLATION_IN_PROGRESS
– シャード分割ジョブはユーザーによってキャンセルされています。 -
CANCELED
– シャード分割ジョブは、ユーザーまたはシステムによって正常にキャンセルされました。 -
SUCCESS
– シャード分割ジョブが正常に完了しました。message
フィールドには、新しいシャードのインスタンス ID が含まれます。 -
FAILED
– シャード分割ジョブが失敗しました。message
フィールドには、失敗の詳細と、失敗したジョブのフォローアップとして実行できるアクションが含まれます。
シャード分割の確定
確定はシャード分割プロセスの最後のステップです。これにより、ダウンタイムが発生します。シャード分割ジョブを開始すると、ジョブが正常に完了した直後に確定が行われます。
rds_aurora.limitless_enable_auto_scale
パラメータを使用してシステム開始のシャード分割を有効にした場合、システムはワークロードに基づいてシャードを分割することがあります。
この場合、確定をすぐに行うか、選択した時間に行うかを選択できます。rds_aurora.limitless_finalize_split_shard_mode
DB クラスターパラメータを使用して、タイミングを選択します。
-
値を
immediate
に設定した場合、すぐに確定されます。 -
値を
user_initiated
に設定した場合、シャード分割ジョブを手動で確定する必要があります。RDS イベントがユーザーに送信され、シャード分割ジョブのステータスが
PENDING
に設定されます。
user_initiated
に設定した場合、rds_aurora.limitless_finalize_split_shard
関数を使用してシャード分割ジョブを確定します。
SELECT * FROM rds_aurora.limitless_finalize_split_shard(
job_id
);
注記
この関数は、ユーザーではなく、システムによって開始されたシャード分割にのみ適用されます。
シャード分割のキャンセル
IN_PROGRESS
または PENDING
のユーザー開始またはシステム開始のシャード分割をキャンセルできます。キャンセルするにはジョブ ID が必要です。
SELECT * from rds_aurora.limitless_cancel_shard_scale_jobs(
job_id
);
エラーがない限り、出力は返されません。ジョブ追跡クエリを使用してキャンセルを追跡できます。