

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

# 2 - 佈建輸送量超出上限
<a name="throttling-provisioned-capacity-exceeded-mitigation"></a>

當應用程式的使用率超過為資料表或全域次要索引設定的讀取或寫入容量單位 (RCU/WCU) 時，系統會發生佈建容量限流。雖然 DynamoDB 提供高載容量以應對偶發流量尖峰，但若請求持續超出佈建限制，仍會觸發限流。當發生這種情況時，DynamoDB 會在限流例外中傳回 `ProvisionedThroughputExceeded` 限流原因類型。此原因可辨識問題屬於讀取或寫入操作，並指出影響範圍是主資料表或全域次要索引。

無論是否啟用 Auto Scaling，皆可能發生限流。Auto Scaling 會隨使用量增加自動調整，但回應並非即時，且受您設定的最大容量上限限制。因此，當流量突增或使用量超出 Auto Scaling 上限時，仍可能出現限流。

## 佈建輸送量超出上限的緩解措施
<a name="throttling-provisioned-throughput-exceeded"></a>

本節提供佈建容量限流情境的解決指引。使用本指南前，請先確認您已在應用程式的例外處理中識別出特定限流原因，並找出受影響資源的 Amazon Resource Name (ARN)。如需了解如何擷取限流原因與識別受限流的資源，請參閱 [DynamoDB 限流診斷架構](throttling-diagnosing-workflow.md#throttling-diagnosing)。

在深入特定限流情境前，請先評估該限流是否真需處理：
+ 在經過良好最佳化的 DynamoDB 應用程式中，偶發限流是正常且可預期的。限流僅表示您已使用完佈建的全部容量。若您的應用程式能透過重試機制妥善處理限流，且整體效能符合需求，則無須立即因限流採取行動。
+ 然而，若限流導致用戶端延遲過高、使用者體驗下降，或關鍵操作無法及時完成，請採取以下緩解措施。

當需要處理限流問題時，請先確定限流的成因：
+ **暫時性流量尖峰：**短時間內超出佈建容量但不持續的流量增加。這類情況所需策略與持續高流量有所不同。
+ **持續高流量：**長期工作負載穩定超出您佈建的容量。

對於流量尖峰，請參考*使用 Amazon DynamoDB 佈建容量處理流量尖峰*部落格中的策略，詳見 [其他資源](#throttling-additional-resources)。

若為持續高流量，請考慮以下容量調整方法：
+ [TableReadProvisionedThroughputExceeded](#throttling-table-read-provisioned) 
+ [TableWriteProvisionedThroughputExceeded](#throttling-table-write-provisioned)
+ [IndexReadProvisionedThroughputExceeded](#throttling-index-read-provisioned) 
+ [IndexWriteProvisionedThroughputExceeded](#throttling-index-write-provisioned) 

### TableReadProvisionedThroughputExceeded
<a name="throttling-table-read-provisioned"></a>

**發生這種情況時**  
您的應用程式讀取使用率超出為資料表設定的[佈建讀取容量單位](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html#DDB-Type-ProvisionedThroughput-ReadCapacityUnits) (RCU)。可透過 [常見診斷與監控](#provisioned-capacity-exceeded-diagnosis-monitoring) 監控 CloudWatch 指標，以分析限流事件。

**解決方法**  
請考慮以下策略以解決讀取容量限流問題：
+ **切換至隨需容量模式：**若因流量尖峰而頻繁限流，請考慮[將資料表切換為隨需模式](#procedure-switch-ondemand)。隨需模式可免除佈建管理，並會隨工作負載自動擴展。
+ **若仍採用佈建模式且未啟用 Auto Scaling：**
  + 請考慮[提高資料表的讀取容量](#provisioned-capacity-exceeded-increase-table-throughput)。
  + 在資料表上[啟用 Auto Scaling 以管理讀取容量](#provisioned-capacity-configure-autoscaling)。
+ **若已啟用 Auto Scaling (主控台建立的資料表預設啟用)：**
  +  [最佳化資料表讀取 Auto Scaling 參數](#provisioned-capacity-optimize-autoscaling-settings)。

### TableWriteProvisionedThroughputExceeded
<a name="throttling-table-write-provisioned"></a>

**發生這種情況時**  
您的應用程式寫入耗用速率超過為資料表設定的[佈建寫入容量單位](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html#DDB-Type-ProvisionedThroughput-WriteCapacityUnits) (WCU)。可透過 [常見診斷與監控](#provisioned-capacity-exceeded-diagnosis-monitoring) 監控 CloudWatch 指標，以分析限流事件。

**解決方法**  
可採用以下策略以解決寫入容量限流問題：
+ **切換至隨需容量模式：**若因流量尖峰而頻繁限流，請考慮[將資料表切換為隨需模式](#procedure-switch-ondemand)。隨需模式可免除佈建管理，並會隨工作負載自動擴展。
+ **若仍採用佈建模式且未啟用 Auto Scaling：**
  + 請考慮[提高資料表的寫入容量](#provisioned-capacity-exceeded-increase-table-throughput)。
  + 在資料表上為[寫入容量啟用 Auto Scaling](#provisioned-capacity-configure-autoscaling)。
+ **若已啟用 Auto Scaling (主控台建立的資料表預設啟用)：**
  + [最佳化資料表寫入 Auto Scaling 的參數](#provisioned-capacity-optimize-autoscaling-settings)。

### IndexReadProvisionedThroughputExceeded
<a name="throttling-index-read-provisioned"></a>

**發生這種情況時**  
全域次要索引 (GSI) 的讀取耗用量超出該 GSI 的[佈建讀取容量單位](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html#DDB-Type-ProvisionedThroughput-ReadCapacityUnits) (RCU)。可透過 [常見診斷與監控](#provisioned-capacity-exceeded-diagnosis-monitoring) 監控 CloudWatch 指標，以分析限流事件。

**解決方法**  
請考慮以下策略以解決 GSI 讀取容量限流問題：
+ **切換為隨需容量模式：**若因流量激增而頻繁發生限流，請考慮[將基礎資料表切換為隨需容量模式](#procedure-switch-ondemand)。隨需模式可免除佈建管理，並會隨工作負載自動擴展。
+ **若仍採用佈建模式且未啟用 Auto Scaling：**
  + 請考慮[提高 GSI 的讀取容量](#provisioned-capacity-exceeded-increase-index-throughput)。
  + 在 GSI 上[啟用讀取容量的 Auto Scaling](#provisioned-capacity-configure-autoscaling)。
+ **若已啟用 Auto Scaling (主控台建立的資料表預設啟用)：**
  + [最佳化 GSI 的讀取 Auto Scaling 參數設定](#provisioned-capacity-optimize-autoscaling-settings)。

### IndexWriteProvisionedThroughputExceeded
<a name="throttling-index-write-provisioned"></a>

**發生這種情況時**  
基礎資料表中項目的更新會觸發對 GSI 的寫入，超出該 [GSI 的佈建寫入容量](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html#DDB-Type-ProvisionedThroughput-WriteCapacityUnits)。這會使基礎資料表寫入出現[背壓限流](gsi-throttling.md)。可透過 [常見診斷與監控](#provisioned-capacity-exceeded-diagnosis-monitoring) 監控 CloudWatch 指標，以分析限流事件。

**解決方法**  
請考慮以下策略以解決 GSI 寫入容量限流問題：
+ **切換為隨需容量模式：**若因流量激增而頻繁發生限流，請考慮[將基礎資料表切換為隨需容量模式](#procedure-switch-ondemand)。隨需模式可免除佈建管理，並會隨工作負載自動擴展。
+ **若仍採用佈建模式且未啟用 Auto Scaling：**
  + 請考慮[提高 GSI 的寫入容量](#provisioned-capacity-exceeded-increase-index-throughput)。
  + 在 GSI 上[啟用寫入容量的 Auto Scaling](#provisioned-capacity-configure-autoscaling)。
+ **若已啟用 Auto Scaling (主控台建立的資料表預設啟用)：**
  + [最佳化 GSI 的寫入 Auto Scaling 參數設定](#provisioned-capacity-optimize-autoscaling-settings)。

## 常見診斷與監控
<a name="provisioned-capacity-exceeded-diagnosis-monitoring"></a>

在疑難排解輸送量錯誤時，數個 CloudWatch 指標可協助識別根本原因。

**主要 CloudWatch 指標**  
監控以下關鍵指標，以診斷佈建容量限流問題：
+ **限流事件：**[https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/metrics-dimensions.html#ReadProvisionedThroughputThrottleEvents](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/metrics-dimensions.html#ReadProvisionedThroughputThrottleEvents) 和 [https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/metrics-dimensions.html#WriteProvisionedThroughputThrottleEvents](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/metrics-dimensions.html#WriteProvisionedThroughputThrottleEvents) 會追蹤因該原因被限流的請求時間；[https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/metrics-dimensions.html#ReadThrottleEvents](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/metrics-dimensions.html#ReadThrottleEvents) 和 [https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/metrics-dimensions.html#WriteThrottleEvents](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/metrics-dimensions.html#WriteThrottleEvents) 則會追蹤任何讀寫請求超出佈建容量的情況。
+ **容量耗用情形：**[https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/metrics-dimensions.html#ConsumedReadCapacityUnits](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/metrics-dimensions.html#ConsumedReadCapacityUnits) 和 [https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/metrics-dimensions.html#ConsumedWriteCapacityUnits](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/metrics-dimensions.html#ConsumedWriteCapacityUnits) 顯示實際使用情況。
+ **佈建容量：**[https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/metrics-dimensions.html#ProvisionedReadCapacityUnits](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/metrics-dimensions.html#ProvisionedReadCapacityUnits) 和 [https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/metrics-dimensions.html#ProvisionedWriteCapacityUnits](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/metrics-dimensions.html#ProvisionedWriteCapacityUnits) 顯示所設定的容量上限。

## 解決步驟
<a name="throttling-resolution-procedures"></a>

### 提高資料表輸送容量
<a name="provisioned-capacity-exceeded-increase-table-throughput"></a>

當未啟用 Auto Scaling 且需要立即提升容量時，請依此程序操作。

1. 使用 DynamoDB 主控台或 SDK AWS CLI更新資料表的佈建容量：
   + **針對讀取容量：**提高 [https://docs.aws.amazon.com//amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html](https://docs.aws.amazon.com//amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html) 參數，該參數指定在 DynamoDB 進行限流前，每秒可執行的高度一致性讀取上限。
   + **針對寫入容量：**提高 [https://docs.aws.amazon.com//amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html](https://docs.aws.amazon.com//amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html) 參數，該參數指定在 DynamoDB 進行限流前，每秒可執行的最大寫入次數。

1. 請確認新容量設定未超出[每個資料表的輸送量配額](ServiceQuotas.md)，且整體帳戶用量仍低於所在區域的[每帳戶輸送量配額](ServiceQuotas.md)。若接近這些限制，建議改用[隨需容量模式](#procedure-switch-ondemand)。

### 設定資料表 Auto Scaling，以調整資料表或 GSI 的讀寫容量
<a name="provisioned-capacity-configure-autoscaling"></a>

設定 DynamoDB [Auto Scaling](AutoScaling.md)，依據流量模式自動調整讀寫容量。可針對資料表與 GSIs 分別設定 Auto Scaling，並獨立控制讀寫容量單位。

1. 在資料表或 GSI 上啟用讀取、寫入或雙向容量的 Auto Scaling。

1. 設定目標使用率百分比，並預留空間以應對流量高峰。
**注意**  
較低的目標使用率將提升成本並增加擴展頻率。若目標值低於 40%，可能造成過度佈建。持續監控用量與成本，以維持效能與效率的平衡。

1. 設定容量上下限：
   + **最小 RCUs/WCUs：**確保在低流量期間維持足夠容量。
   + **最大 RCUs/WCUs：**支援尖峰流量需求，並防止擴展失控。

如需有關設定與管理 DynamoDB Auto Scaling 的指引，請參閱[使用 DynamoDB Auto Scaling 自動管理輸送容量](AutoScaling.md)。

**注意**  
Auto Scaling 通常需要數分鐘才能對流量變化做出回應。當流量突增時，資料表的高載容量可在 Auto Scaling 調整期間提供即時保護。設定具足夠餘裕的目標使用率，以確保有時間進行擴展，並保留高載容量以應對突發需求。

### 最佳化資料表或索引的讀寫 Auto Scaling 設定
<a name="provisioned-capacity-optimize-autoscaling-settings"></a>

當 [Auto Scaling](AutoScaling.md) 已啟用但仍發生限流時，請依此程序操作。可分別為資料表與全域次要索引 (GSIs) 調整 Auto Scaling，並獨立控制讀寫容量單位。
+ **調整目標使用率：**可考慮降低資料表或 GSIs 的目標使用率，以在限流發生前提前觸發擴展。進行調整後，請持續監控流量變化。如需了解容量使用與成本影響的更多資訊，請參閱 [設定資料表 Auto Scaling，以調整資料表或 GSI 的讀寫容量](#provisioned-capacity-configure-autoscaling)。
+ **檢視容量上下限：**確保最小與最大容量設定符合實際工作負載模式。

### 切換至隨需容量模式
<a name="procedure-switch-ondemand"></a>

如需了解切換容量模式的一般資訊，請參閱 [切換 DynamoDB 容量模式時的注意事項](bp-switching-capacity-modes.md)。請參閱 Service Quotas，以了解[切換模式時的特定限制](troubleshooting-throttling-diagnostics.md)。

### 提高 GSI 輸送容量
<a name="provisioned-capacity-exceeded-increase-index-throughput"></a>

當 GSI 未啟用 Auto Scaling 或需立即提升容量時，請依此程序操作。

1. 使用 DynamoDB 主控台或 SDK AWS CLI更新 GSI 的佈建容量：
   + **針對讀取容量：**提高特定 GSI 的 [https://docs.aws.amazon.com//amazondynamodb/latest/APIReference/API_GlobalSecondaryIndexUpdate.html](https://docs.aws.amazon.com//amazondynamodb/latest/APIReference/API_GlobalSecondaryIndexUpdate.html) 參數，該參數指定在 DynamoDB 進行限流前，GSI 每秒可執行的最大讀取次數。請注意，GSI 僅支援最終一致讀取。
   + **針對寫入容量：**提高特定 GSI 的 [https://docs.aws.amazon.com//amazondynamodb/latest/APIReference/API_GlobalSecondaryIndexUpdate.html](https://docs.aws.amazon.com//amazondynamodb/latest/APIReference/API_GlobalSecondaryIndexUpdate.html) 參數，該參數指定在 DynamoDB 進行限流前，GSI 每秒可執行的最大寫入次數。

1. 確保 GSI 的佈建輸送容量維持在[每帳戶與每資料表的輸送量配額](ServiceQuotas.md)範圍內。

## 其他資源
<a name="throttling-additional-resources"></a>
+  如需詳細資訊，說明如何在 DynamoDB 佈建容量資料表中處理流量尖峰，包括從利用 Auto Scaling 與高載容量到策略性限流管理等多種方法，請參閱[使用 Amazon DynamoDB 佈建容量處理流量尖峰](https://aws.amazon.com/blogs//database/handle-traffic-spikes-with-amazon-dynamodb-provisioned-capacity/)。
+ 如需了解如何使用 Cron 表達式排程擴展政策，請參閱[透過排程 DynamoDB 佈建容量來最佳化成本](https://aws.amazon.com/blogs/database/optimize-costs-by-scheduling-provisioned-capacity-for-amazon-dynamodb/)。
+ 如需實作指南，說明如何在佈建容量模式中監控與分析 DynamoDB 資料表的輸送量使用模式，請參閱[如何在佈建模式中評估 Amazon DynamoDB 資料表的輸送量使用率](https://aws.amazon.com/blogs/database/how-to-evaluate-throughput-utilization-for-amazon-dynamodb-tables-in-provisioned-mode/)。