我的 Amazon DynamoDB 佈建資料表的讀取或寫入作業被限流。或者,我在佈建的 DynamoDB 資料表上執行讀取或寫入作業時,收到以下錯誤: 「ProvisionedThroughputExceededException」。
簡短說明
以下是您可能會遇到關於 DynamoDB 佈建資料表的常見限流問題:
- 您的 DynamoDB 資料表有足夠的已佈建容量,但是大部分的請求被限流。
- 您已為 DynamoDB 開啟 AWS 應用程式自動擴展,但是您的 DynamoDB 資料表被限流。
- 您的資料表有一個熱分區。
- 資料表的流量超過您的帳戶輸送量配額。
解決方法
**注意:**如需限流事件期間必須監控之 DynamoDB 指標的相關資訊,例如 WriteThrottleEvents 和 ReadThrottleEvents,請參閱 DynamoDB 指標和維度。
請根據您的使用情況,完成以下任務。
您的 DynamoDB 資料表有足夠的已佈建容量,但是大部分的請求被限流
DynamoDB 會向 Amazon CloudWatch 報告分鐘級指標。指標會計算為一分鐘的總和,然後再計算平均值。不過,會每秒套用 DynamoDB 速率限制。例如,如果您為 DynamoDB 資料表佈建 60 個寫入容量單位,則可以在一分鐘內執行 3,600 次寫入。但是,在一秒鐘內驅動所有 3,600 個請求,而在該分鐘的剩餘時間沒有請求的情況下,可能會導致限流。每分鐘的讀取容量單位或寫入容量單位總數,可能比資料表的佈建輸送量低。但是,如果所有工作負載都落在幾秒鐘內,則請求可能受到限流。
若要解決此問題,請確定您的資料表有足夠的容量以處理流量,並使用指數退避再進行受限流的請求一次。如果您使用 AWS SDK,則預設情況下會實作此邏輯。如需詳細資訊,請參閱錯誤重試和指數退避。
**注意:**DynamoDB 不會在每秒消耗的容量超過佈建容量後,開始限流資料表。透過高載容量功能,DynamoDB 會為日後的輸送量爆量保留一部分未使用的容量,以因應尖峰時間使用量。如需詳細資訊,請參閱佈建容量模式和 Amazon DynamoDB 如何在短時間內處理尖峰負載?
您已為 DynamoDB 開啟 AWS 應用程式自動擴展,但是您的 DynamoDB 資料表被限流
AWS 應用程式自動擴展不是解決 DynamoDB 資料表突然出現尖峰流量的適當解決方法。已耗用容量單位的兩個連續資料點超過一分鐘範圍內設定的使用率值時,應用程式自動擴展才會啟動自動擴展。只有耗用的容量連續兩分鐘比目標使用率高時,應用程式自動擴展才會自動擴展佈建的容量。
CloudWatch 的 15 個已耗用容量連續資料點比目標使用率低時,也會啟動縮減事件。啟動應用程式自動擴展後,將調用 UpdateTable API 呼叫。API 呼叫可能需要幾分鐘的時間,以更新 DynamoDB 資料表或索引的佈建容量。應用程式自動擴展需要具有較高目標使用率值的連續資料點,才能擴展 DynamoDB 資料表的佈建容量。在此期間,超出資料表佈建容量的任何請求都會受到限流。使用應用程式自動擴展以處理 DynamoDB 尖峰工作負載,不是最佳實務。相反地,請切換到隨需模式。如需詳細資訊,請參閱使用 DynamoDB 自動擴展,自動管理輸送量容量。
資料表有一個熱分區
在 DynamoDB 中,沒有高基數的分區索引鍵可能會導致許多請求只針對少數幾個分區。此事件會造成熱分區。如果超過每秒 3000 RCU 和 1000 WCU (或兩者的組合) 的分區上限,熱分區可能會造成限流。
要在資料表找到存取次數最多和限流最多的項目,請使用 Amazon CloudWatch Contributor Insights。Amazon CloudWatch Contributor Insights 是一種診斷工具,可提供 DynamoDB 資料表流量趨勢的摘要圖。使用此工具,以識別最常存取的分區索引鍵,並持續監控資料表項目存取模式的圖表。
熱分區可能會降低資料表的整體效能。若要避免此類效能不佳的問題,請盡可能在您的資料表中平均分佈讀取和寫入作業。如需詳細資訊,請參閱設計分區金鑰以分佈工作負載和選擇正確的 DynamoDB 分區金鑰。
此外,您可以在熱鍵上實施寫入碎片來增加基數,並允許熱鍵跨越多個分區。如需詳細資訊,請參閱使用寫入碎片平均分配工作負載。使用指數退避再進行受限流的請求一次。如果您使用 AWS SDK,則預設情況下會實作此邏輯。如需詳細資訊,請參閱錯誤重試和指數退避。
當您預期有高流量時,最佳實務是提高佈建容量的數值。增加佈建容量可提高後端中的分區數量。
**注意:**如果您針對 DynamoDB 使用 CloudWatch Contributor Insights 工具,將產生額外費用。如需詳細資訊,請參閱 CloudWatch Contributor Insights 的 DynamoDB 計費。
資料表的流量超過您的帳戶輸送量配額
資料表層級讀取輸送量和資料表層級寫入輸送量配額適用任何 AWS 區域的帳戶層級。這些配額適用同時具有佈建容量模式和隨需容量模式的資料表。預設情況下,放置在資料表的輸送量配額為 40,000 個讀取請求單位和 40,000 個寫入請求單位。如果資料表的流量超過此配額,資料表可能會受到限流。
要解決此問題,使用 Service Quotas 主控台以增加您帳戶的資料表層級讀取或寫入輸送量配額。
相關資訊
有效設計和使用分區索引鍵的最佳實務