2 - 佈建輸送量超出上限 - Amazon DynamoDB

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

2 - 佈建輸送量超出上限

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

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

佈建輸送量超出上限的緩解措施

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

在深入特定限流情境前,請先評估該限流是否真需處理:

  • 在經過良好最佳化的 DynamoDB 應用程式中,偶發限流是正常且可預期的。限流僅表示您已使用完佈建的全部容量。若您的應用程式能透過重試機制妥善處理限流,且整體效能符合需求,則無須立即因限流採取行動。

  • 然而,若限流導致用戶端延遲過高、使用者體驗下降,或關鍵操作無法及時完成,請採取以下緩解措施。

當需要處理限流問題時,請先確定限流的成因:

  • 暫時性流量尖峰:短時間內超出佈建容量但不持續的流量增加。這類情況所需策略與持續高流量有所不同。

  • 持續高流量:長期工作負載穩定超出您佈建的容量。

對於流量尖峰,請參考使用 Amazon DynamoDB 佈建容量處理流量尖峰部落格中的策略,詳見 其他資源

若為持續高流量,請考慮以下容量調整方法:

TableReadProvisionedThroughputExceeded

發生這種情況時

您的應用程式讀取使用率超出為資料表設定的佈建讀取容量單位 (RCU)。可透過 常見診斷與監控 監控 CloudWatch 指標,以分析限流事件。

解決方法

請考慮以下策略以解決讀取容量限流問題:

TableWriteProvisionedThroughputExceeded

發生這種情況時

您的應用程式寫入耗用速率超過為資料表設定的佈建寫入容量單位 (WCU)。可透過 常見診斷與監控 監控 CloudWatch 指標,以分析限流事件。

解決方法

可採用以下策略以解決寫入容量限流問題:

IndexReadProvisionedThroughputExceeded

發生這種情況時

全域次要索引 (GSI) 的讀取耗用量超出該 GSI 的佈建讀取容量單位 (RCU)。可透過 常見診斷與監控 監控 CloudWatch 指標,以分析限流事件。

解決方法

請考慮以下策略以解決 GSI 讀取容量限流問題:

IndexWriteProvisionedThroughputExceeded

發生這種情況時

基礎資料表中項目的更新會觸發對 GSI 的寫入,超出該 GSI 的佈建寫入容量。這會使基礎資料表寫入出現背壓限流。可透過 常見診斷與監控 監控 CloudWatch 指標,以分析限流事件。

解決方法

請考慮以下策略以解決 GSI 寫入容量限流問題:

常見診斷與監控

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

主要 CloudWatch 指標

監控以下關鍵指標,以診斷佈建容量限流問題:

解決步驟

提高資料表輸送容量

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

  1. 使用 DynamoDB 主控台或 SDK AWS CLI更新資料表的佈建容量:

    • 針對讀取容量:提高 ReadCapacityUnits 參數,該參數指定在 DynamoDB 進行限流前,每秒可執行的高度一致性讀取上限。

    • 針對寫入容量:提高 WriteCapacityUnits 參數,該參數指定在 DynamoDB 進行限流前,每秒可執行的最大寫入次數。

  2. 請確認新容量設定未超出每個資料表的輸送量配額,且整體帳戶用量仍低於所在區域的每帳戶輸送量配額。若接近這些限制,建議改用隨需容量模式

設定資料表 Auto Scaling,以調整資料表或 GSI 的讀寫容量

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

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

  2. 設定目標使用率百分比,並預留空間以應對流量高峰。

    注意

    較低的目標使用率將提升成本並增加擴展頻率。若目標值低於 40%,可能造成過度佈建。持續監控用量與成本,以維持效能與效率的平衡。

  3. 設定容量上下限:

    • 最小 RCUs/WCUs:確保在低流量期間維持足夠容量。

    • 最大 RCUs/WCUs:支援尖峰流量需求,並防止擴展失控。

如需有關設定與管理 DynamoDB Auto Scaling 的指引,請參閱使用 DynamoDB Auto Scaling 自動管理輸送容量

注意

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

最佳化資料表或索引的讀寫 Auto Scaling 設定

Auto Scaling 已啟用但仍發生限流時,請依此程序操作。可分別為資料表與全域次要索引 (GSIs) 調整 Auto Scaling,並獨立控制讀寫容量單位。

  • 調整目標使用率:可考慮降低資料表或 GSIs 的目標使用率,以在限流發生前提前觸發擴展。進行調整後,請持續監控流量變化。如需了解容量使用與成本影響的更多資訊,請參閱 設定資料表 Auto Scaling,以調整資料表或 GSI 的讀寫容量

  • 檢視容量上下限:確保最小與最大容量設定符合實際工作負載模式。

切換至隨需容量模式

如需了解切換容量模式的一般資訊,請參閱 切換 DynamoDB 容量模式時的注意事項。請參閱 Service Quotas,以了解切換模式時的特定限制

提高 GSI 輸送容量

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

  1. 使用 DynamoDB 主控台或 SDK AWS CLI更新 GSI 的佈建容量:

    • 針對讀取容量:提高特定 GSI 的 ReadCapacityUnits 參數,該參數指定在 DynamoDB 進行限流前,GSI 每秒可執行的最大讀取次數。請注意,GSI 僅支援最終一致讀取。

    • 針對寫入容量:提高特定 GSI 的 WriteCapacityUnits 參數,該參數指定在 DynamoDB 進行限流前,GSI 每秒可執行的最大寫入次數。

  2. 確保 GSI 的佈建輸送容量維持在每帳戶與每資料表的輸送量配額範圍內。

其他資源