

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在資料庫碎片群組中分割碎片
<a name="limitless-shard-split"></a>

您可以手動將資料庫碎片群組中的碎片分割成兩個較小的碎片。這稱為*使用者啟動的*碎片分割。

Aurora PostgreSQL Limitless Database 也可以在碎片具有非常大量資料或使用量非常高時分割碎片。這稱為*系統啟動的*碎片分割。

**Topics**
+ [先決條件](#limitless-shard-split.prereqs)
+ [分割碎片](#limitless-shard-split.proc)
+ [追蹤碎片分割](#limitless-shard-split.track)
+ [完成碎片分割](#limitless-shard-split.finalize)
+ [取消碎片分割](#limitless-shard-split.cancel)

## 先決條件
<a name="limitless-shard-split.prereqs"></a>

使用者啟動的碎片分割具有下列先決條件：
+ 您必須擁有資料庫碎片群組。
+ 資料庫碎片群組不能為空：其必須至少包含一個碎片資料表。
+ 使用者必須具有 `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 to username;
  ```
+ 您必須知道要分割之碎片的子叢集 (節點) ID。您可以使用下列查詢取得 ID：

  ```
  SELECT * FROM rds_aurora.limitless_subclusters;
  
   subcluster_id | subcluster_type
  ---------------+-----------------
   1             | router
   2             | router
   3             | shard
   4             | shard
   5             | shard
   6             | shard
  ```

若要啟用系統啟動的碎片分割，請在與資料庫叢集相關聯的自訂資料庫叢集參數群組中設定下列資料庫叢集參數：


| 參數 | Value | 
| --- | --- | 
|  `rds_aurora.limitless_enable_auto_scale`  |  `on`  | 
|  `rds_aurora.limitless_auto_scale_options`  |  `split_shard` 或 `add_router,split_shard`。  | 
|  `rds_aurora.limitless_finalize_split_shard_mode`  |  此參數決定如何完成*系統啟動的*碎片分割。值可為下列其中之一： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/limitless-shard-split.html) 如需詳細資訊，請參閱[完成碎片分割](#limitless-shard-split.finalize)。  此參數僅適用於系統啟動的碎片分割。   | 

如需詳細資訊，請參閱[Amazon Aurora 資料庫叢集的資料庫叢集參數群組](USER_WorkingWithDBClusterParamGroups.md)。

## 分割碎片
<a name="limitless-shard-split.proc"></a>

若要分割資料庫碎片群組中的碎片，請使用 `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)
```

**注意**  
不支援並行碎片分割操作。在啟動另一個新增項目操作之前，依序執行與完成每個操作。

## 追蹤碎片分割
<a name="limitless-shard-split.track"></a>

您可以使用任務 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`：碎片分割任務已提交且正在進行中。您一次只能有一個進行中的任務。
+ `PENDING`：碎片分割任務正在等待您完成。如需詳細資訊，請參閱[完成碎片分割](#limitless-shard-split.finalize)。
+ `CANCELLATION_IN_PROGRESS`：使用者正在取消碎片分割任務。
+ `CANCELED`：使用者或系統已成功取消碎片分割任務。
+ `SUCCESS`：碎片分割任務已成功完成。`message` 欄位包含新碎片的執行個體 ID。
+ `FAILED`：碎片分割任務失敗。`message` 欄位包含失敗的詳細資訊，以及可作為失敗任務後續工作的任何動作。

## 完成碎片分割
<a name="limitless-shard-split.finalize"></a>

完成是碎片分割程序的最後一步。其會導致一些停機時間。如果您啟動碎片分割任務，則完成會在任務成功完成後立即完成。

當您使用 `rds_aurora.limitless_enable_auto_scale` 參數啟用系統啟動的碎片分割時，系統有時會根據工作負載分割碎片。

在這種情況下，您可以選擇是否立即完成，還是在您選擇的時間完成。您可以使用 `rds_aurora.limitless_finalize_split_shard_mode` 資料庫叢集參數來選擇何時發生：
+ 如果您將值設為 `immediate`，則會立即發生。
+ 如果您將值設為 `user_initiated`，則必須手動完成碎片分割任務。

  系統會將 RDS 事件傳送給您，以及將碎片分割任務的狀態設為 `PENDING`。

設定為 `user_initiated` 時，您可以使用 `rds_aurora.limitless_finalize_split_shard` 函數來完成碎片分割任務：

```
SELECT * FROM rds_aurora.limitless_finalize_split_shard(job_id);
```

**注意**  
此函數僅適用於由系統啟動的碎片分割，而非由您啟動的碎片分割。

## 取消碎片分割
<a name="limitless-shard-split.cancel"></a>

您可以取消狀態為 `IN_PROGRESS` 或 `PENDING` 的使用者啟動或系統啟動碎片分割。您需要任務 ID 才能將其取消。

```
SELECT * from rds_aurora.limitless_cancel_shard_scale_jobs(job_id);
```

除非發生錯誤，否則不會傳回任何輸出。您可以使用任務追蹤查詢來追蹤取消。