

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

# Neptune Serverless 資料庫叢集中的容量擴展
<a name="neptune-serverless-capacity-scaling"></a>

設定 Neptune Serverless 資料庫叢集類似於設定一般佈建的叢集，但有其他組態用於擴展的最小和最大單位，而執行個體類型設定為 `db.serverless`。擴展組態是在 Neptune 容量單位 (NCU) 中定義，每個單位都包含 2 GiB (gibibyte) 記憶體 (RAM)，以及相關聯的虛擬處理器容量 (vCPU) 和網路。它會設定為 `ServerlessV2ScalingConfiguration` 物件的一部分，以 JSON 表示，如下所示：

```
"ServerlessV2ScalingConfiguration": {
  "MinCapacity": {{(minimum NCUs, a floating-point number such as   1.0)}},
  "MaxCapacity": {{(maximum NCUs, a floating-point number such as 128.0)}}
}
```

在任何時候，每個 Neptune 寫入器或讀取器執行個體都有一個由浮點數測量的容量，代表該執行個體目前正在使用的 NCU 數目。您可以在執行個體層級使用 CloudWatch [ServerlessDatabaseCapacity](neptune-serverless-using.md#neptune-serverless-monitoring) 指標，了解給定資料庫執行個體目前正在使用的 NCU 數目，以及使用 [NCUUtilization](neptune-serverless-using.md#neptune-serverless-monitoring) 指標，了解執行個體正在使用的最大容量百分比。這兩個指標也可在資料庫叢集層級使用，以顯示整體資料庫叢集的平均資源使用率。

當您建立 Neptune Serverless 資料庫叢集時，可以為所有無伺服器執行個體設定 **Neptune 容量單位** (NCU) 的數目下限和上限。

您指定的最小 NCU 值會設定資料庫叢集中無伺服器執行個體可縮小的最小大小，同樣地，最大 NCU 值會建立無伺服器執行個體可以增長的最大大小。您可以設定的最大 NCU 值最高為 128.0 NCU，而最小值最低為 1.0 NCU。

Neptune 會持續追蹤每個 Neptune Serverless 執行個體上的負載，方法是監控 CPU、記憶體和網路等資源的使用率。負載是由應用程式的資料庫操作、伺服器的背景處理，以及其他管理任務所產生。

當無伺服器執行個體上的負載達到目前容量的上限時，或是當 Neptune 偵測到任何其他效能問題時，執行個體就會自動縱向擴展。當執行個體上的負載下降時，容量會縮減至設定的最小容量單位，CPU 容量會比記憶體先釋放。這種架構允許以受控的逐步下降方式釋放資源，並有效地處理需求波動。

您可以使讀取器執行個體與寫入器執行個體一起擴展，或透過設定其提升層來獨立擴展。提升層 0 和 1 中的讀取器執行個體會與寫入器同時擴展，這會使它們的大小調整到適當的容量，以在發生容錯移轉時快速從寫入器處接管工作負載。提升層 2 到 15 中的讀取器與寫入器執行個體各自獨立擴展，而且讀取器彼此也獨立擴展。

如果您已將 Neptune 資料庫叢集建立為多可用區域叢集以確保高可用性，Neptune Serverless 會隨著資料庫負載而縱向擴展和縮減所有可用區域中的執行個體。您可以將次要可用區域中讀取器執行個體的提升層設定為 0 或 1，以便其隨著主要可用區域中寫入器執行個體的容量進行縱向擴展和縮減規模，隨時準備好接管目前的工作負載。

**注意**  
Neptune 資料庫叢集的儲存體由您分散在三個可用區域中的所有資料的六個副本組成，不論您是否已將叢集建立為多可用區域叢集。儲存體複寫是由儲存子系統處理，不受 Neptune Serverless 影響。

## 為 Neptune Serverless 資料庫叢集選擇最小容量值
<a name="neptune-serverless-capacity-range-min"></a>

您可以針對最小容量設定的最小值為 `1.0` NCU。

確定不要將最小值設定為低於應用程式有效操作所需的值。將其設定太低可能會在特定記憶體密集型工作負載中造成更高的逾時率。

將最小值設定為盡可能低可以節省成本，因為當需求低時，您的叢集將使用最少的資源。不過，如果您的工作負載往往會大幅波動 (從非常低到非常高)，您可能想要設定較高的最小值，因為較高的最小值可讓 Neptune Serverless 執行個體更快地縱向擴展。

原因是 Neptune 會根據目前的容量選擇擴展增量。如果目前容量很低，Neptune 一開始就會緩慢地縱向擴展。如果最小值較高，Neptune 會從較大的擴展增量開始，因此可以更快地縱向擴展，以因應工作負載大幅突然增加的情況。

## 為 Neptune Serverless 資料庫叢集選擇最大容量值
<a name="neptune-serverless-capacity-range-max"></a>

您可以針對最大容量設定的最大值是 `128.0` NCU，而您可以針對為最大容量設定的最小值為 `2.5` NCU。無論您設定的最大容量值為何，它都必須至少與您設定的最小容量值相同。

一般規則是設定足夠高的最大值，以處理應用程式可能會遇到的尖峰負載。將其設定太低可能會在特定記憶體密集型工作負載中造成更高的逾時率。

將最大值設定為盡可能高，其優點是即使是最意外的工作負載，您的應用程式也許都能夠處理。缺點是您會失去一些預測和控制資源成本的能力。非預期的需求激增最終可能是成本遠遠超出您預算所預期的。

精心設定最大值的好處在於，它可讓您滿足尖峰需求，同時也限制 Neptune 運算成本。

**注意**  
變更 Neptune Serverless 資料庫叢集的容量範圍會造成某些組態參數的預設值發生變更。Neptune 可以立即套用其中某些新的預設值，但某些動態參數變更僅在重新啟動之後才會生效。`pending-reboot` 狀態表示需要重新啟動才能套用某些參數的變更。

## 使用現有的組態來估計無伺服器需求
<a name="neptune-serverless-provisioned-data"></a>

如果您通常會修改所佈建資料庫執行個體的資料庫執行個體類別，以滿足異常高或低的工作負載，則可以使用該體驗粗略估計相等的 Neptune Serverless 容量範圍。

### 估計最佳的最小容量設定
<a name="neptune-serverless-estimate-minimum"></a>

您可以套用您對現有 Neptune 資料庫叢集了解的內容，以估計最適合的無伺服器最小容量設定。

例如，如果您佈建的工作負載對於 `T3` 或 `T4g` 等小型資料庫執行個體類別的記憶體要求過高，請選擇提供與 `R5` 或 `R6g` 資料庫執行個體類別相當之記憶體的最小 ACU 設定。

或者，假設您在叢集具有低工作負載時，使用 `db.r6g.xlarge` 資料庫執行個體類別。該資料庫執行個體類別具有 32 GiB 的記憶體，因此您可以將最小 NCU 設定指定為 16，來建立可以縮減規模至與該容量大約相同的無伺服器執行個體 (每個 NCU 對應於大約 2 GiB 的記憶體)。如果您的 `db.r6g.xlarge` 執行個體有時並未充分利用，則您也許能夠指定較低的值。

如果您的資料庫執行個體可在記憶體或緩衝區快取中保留給定數量的資料時，您的應用程式運作效率最高，請考慮指定大到足以為此提供足夠記憶體的最小 NCU 設定。否則，當無伺服器執行個體縮減規模時，資料可能會從緩衝區快取中移出，而且一段時間後在執行個體再次縱向擴展時，必須將資料讀回緩衝區快取。如果要將資料帶回緩衝區快取的 I/O 量很大，則選擇較高的最小 ACU 值可能值得一試。

如果您發現無伺服器執行個體大部分時間都以特定容量執行，則將最小容量設定為略低於該容量，這會有很好的效果。當目前容量並未明顯低於所需容量時，Neptune Serverless 可最有效地估計縱向擴展的數量和速度。

在[混合組態](neptune-serverless-configuration.md#neptune-serverless-mixed-configuration) (具有佈建的寫入器和 Neptune Serverless 讀取器) 中，讀取器不會與寫入器一起擴展。因為它們獨立擴展，所以針對其設定較低的最小容量可能會導致過長的複寫延遲。當有高度寫入密集型工作負載時，它們可能沒有足夠的容量來跟上寫入器所做的變更。在此情況下，請設定與寫入器容量相當的最小容量。尤其，如果您在位於提升層 2 至 15 的讀取器中觀察到複本延遲，請增加叢集的最小容量設定。

### 估計最佳的最大容量設定
<a name="neptune-serverless-estimate-maximum"></a>

您也可以套用您對現有 Neptune 資料庫叢集了解的內容，以估計最適合的無伺服器最大容量設定。

例如，假設您在叢集具有高工作負載時，使用 `db.r6g.4xlarge` 資料庫執行個體類別。該資料庫執行個體類別具有 128 GiB 的記憶體，因此您可以將最大 NCU 設定指定為 64，以設定相等的 Neptune Serverless 執行個體 (每個 NCU 對應至大約 2 GiB 的記憶體)。如果您的 `db.r6g.4xlarge` 執行個體無法一直處理工作負載，則您可指定一個較高的值，讓資料庫執行個體進一步縱向擴展。

如果工作負載出現非預期的激增情況很少見，則設定足夠高的最大容量設定，即使在這些激增期間也能維持應用程式效能，這可能有意義。另一方面，您可能想要設定較低的最大容量，可在異常激增期間減少輸送量，但這可讓 Neptune 毫無問題地處理預期的工作負載，並限制成本。