本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
4 - 超過隨需輸送量上限
當您設定隨需資料表或 GSI 時,可選擇在資料表或索引層級設定最大輸送量上限 (MaxReadRequestUnits 和 MaxWriteRequestUnits),以防止成本失控,或避免下游系統因流量過大而超載。如需最大輸送量上限的詳細資訊,請參閱 DynamoDB 隨需資料表的最大輸送量。
當讀取或寫入耗用量超出這些自訂限制時,超出部分的其他請求會收到即時限流回應。DynamoDB 會傳回含有 MaxOnDemandThroughputExceeded 限流原因類型的例外狀況,用以指出已達輸送量界限的資源。
超過隨需最大輸送量限流
本節提供超出限流案例的隨需最大輸送量的解析指引。使用本指南前,請先從應用程式的例外狀況處理中確認具體的限流原因,並確定受影響資源的 Amazon Resource Name (ARN)。如需了解如何擷取限流原因並識別遭限流的資源,請參閱 DynamoDB 限流診斷架構。
在深入分析特定限流情境前,請先評估是否真的需要採取行動:
-
評估您的最大輸送量上限設定:這些限制是為了控制成本或保護下游系統而刻意設定的。如果您收到
MaxOnDemandThroughputExceeded限流事件,代表您的限制正在依設計運作。評估提高這些限制是否符合原先的成本控制或系統保護目標。 -
評估應用程式影響:確認限流是否確實影響您的應用程式或使用者。若您的應用程式能有效處理重試,且在偶發限流下仍符合效能需求,維持現有限制可能是最佳選項。
-
檢視流量模式:分析限流是否屬於預期的流量行為或異常高峰。對於可預測且持續超出限制的週期性流量模式,建議調整最大輸送量上限設定。若為暫時性高峰,實作更佳的請求分散策略可能比提升限制更為合宜。
若評估後確認需調整最大輸送量上限設定,請參閱以下特定限流情境,以取得對應的修正方案:
TableReadMaxOnDemandThroughputExceeded
發生這種情況時
您的隨需模式資料表已超出其設定的最大讀取輸送容量上限。可透過 常見診斷與監控 監控 CloudWatch 指標,以分析限流事件。
修正方案
可參考以下步驟處理限流事件:
-
提高最大輸送量上限:使用 DynamoDB 主控台
、AWS CLI 或 DynamoDB UpdateTableAPI 來提高受影響資料表的MaxReadRequestUnits值,再進行監控與調整。這可讓資料表在發生限流前處理更高的讀取輸送量。 -
移除上限:將
MaxReadRequestUnits設定為-1,以移除上限,允許依需求擴展至帳戶層級輸送量配額。這將移除自訂限制,但仍保留 AWS的帳戶層級防護機制。不過,移除此限制後請密切監控支出,因為資料表在達到帳戶層級配額前可能耗用顯著更多的容量。
TableWriteMaxOnDemandThroughputExceeded
發生這種情況時
您的隨需模式資料表已超出其設定的最大寫入輸送容量上限。可透過 常見診斷與監控 監控 CloudWatch 指標,以分析限流事件。
修正方案
可參考以下步驟處理限流事件:
-
提高最大輸送量上限:使用 DynamoDB 主控台
、AWS CLI 或 DynamoDB UpdateTableAPI 來提高受影響資料表的MaxWriteRequestUnits值,再進行監控與調整。 -
移除上限:將
MaxWriteRequestUnits設定為-1,以移除上限,允許依需求擴展至帳戶層級輸送量配額。這將移除自訂限制,但仍保留 AWS的帳戶層級防護機制。不過,移除此限制後請密切監控支出,因為資料表在達到帳戶層級配額前可能耗用顯著更多的容量。
IndexReadMaxOnDemandThroughputExceeded
發生這種情況時
在隨需模式中,對 GSI 的讀取請求已超出其設定的最大讀取輸送容量上限。可透過 常見診斷與監控 監控 CloudWatch 指標,以分析限流事件。
修正方案
可參考以下步驟處理限流事件:
-
提高 GSI 最大輸送量上限:使用 DynamoDB 主控台
、AWS CLI 或 DynamoDB UpdateTableAPI 來提高受影響 GSI 的MaxReadRequestUnits值,然後進行監控與調整。 -
移除 GSI 上限:將 GSI 的
MaxReadRequestUnits設定為-1,以移除上限,允許依需求擴展至帳戶層級輸送量配額。這會移除您的自訂限制,但仍維持 AWS帳戶層級的保護。不過,移除此限制後請密切監控支出。
IndexWriteMaxOnDemandThroughputExceeded
發生這種情況時
當基礎資料表項目的更新在隨需模式下觸發對 GSI 的寫入,超出其設定的最大寫入輸送容量上限時,會導致背壓限流。可透過 常見診斷與監控 監控 CloudWatch 指標,以分析限流事件。
修正方案
可參考以下步驟處理限流事件:
-
提高 GSI 最大輸送量上限:使用 DynamoDB 主控台
、AWS CLI 或 DynamoDB UpdateTableAPI 來提高受影響 GSI 的MaxWriteRequestUnits值,然後進行監控與調整。 -
移除 GSI 上限:將 GSI 的
MaxWriteRequestUnits設定為-1,以移除上限,允許依需求擴展至帳戶層級輸送量配額。這會移除您的自訂限制,但仍維持 AWS帳戶層級的保護。不過,移除此限制後請密切監控支出。
常見診斷與監控
當對隨需輸送量超過限流事件進行故障診斷時,數個 CloudWatch 指標有助於識別根本原因和擴展模式。
主要 CloudWatch 指標
監控這些關鍵指標,以診斷超出限流的隨需最大輸送量:
-
最大輸送量限流事件:
ReadMaxOnDemandThroughputThrottleEvents與WriteMaxOnDemandThroughputThrottleEvents用於追蹤因超出上限而被限流的請求;ReadThrottleEvents與WriteThrottleEvents則追蹤任何超出佈建容量的讀寫請求。 -
資料表或全域次要索引目前設定的最大輸送量上限:
OnDemandMaxReadRequestUnits與OnDemandMaxWriteRequestUnits顯示現行的最大容量限制。 -
實際容量耗用情形:
ConsumedReadCapacityUnits與ConsumedWriteCapacityUnits顯示實際使用模式。
分析步驟
請依照下列步驟確認隨需輸送量超過診斷上限:
-
比較已耗用容量與最大容量上限,檢查耗用量是否持續接近或超出上限。
-
檢視限流事件的頻率與發生時間,以辨識模式。檢查是否有與限流事件同時出現的耗用容量急增。
-
使用 CloudWatch Contributor Insights 以識別耗用容量最高的項目或分割區索引鍵。