為什麼我的 Amazon DynamoDB 資料表被限流?

1 分的閱讀內容
0

我的 Amazon DynamoDB 資料表的讀取或寫入作業被限流。-或-我在 DynamoDB 資料表上執行讀取或寫入作業時,收到 ProvisionedThroughputExceededException。

簡短說明

以下是您可能會遇到的一些常見限流問題:

  • 您的 DynamoDB 資料表有足夠的已佈建容量,但是大部分的請求被限流。
  • 您已為 DynamoDB 啟用 AWS 應用程式自動擴展,但是您的 DynamoDB 資料表正進行限流。
  • 您的 DynamoDB 資料表處於隨需容量模式,但資料表被限流。
  • 您的資料表有一個熱分區。
  • 資料表的流量超出您的帳戶輸送量配額。

解決方法

如需限流事件期間必須監控的 DynamoDB 指標的相關資訊,請參閱 DynamoDB 指標和維度。這些指標可協助您找出建立限流請求的作業,並識別限流的原因。根據您的使用案例,使用下列一或多個疑難排解選項。

您的 DynamoDB 資料表有足夠的已佈建容量,但是大部分的請求被限流

DynamoDB 會向 Amazon CloudWatch 報告分鐘級指標。指標會計算為一分鐘的總和,然後再計算平均值。不過,會每秒套用 DynamoDB 速率限制。例如,如果您為 DynamoDB 資料表佈建 60 個寫入容量單位,則可以在一分鐘內執行 3600 次寫入。但是,在一秒鐘內驅動所有 3600 個請求,而在該分鐘的剩餘時間沒有請求的情況下,可能會導致限流。每分鐘的讀取容量單位或寫入容量單位總數可能比資料表的佈建輸送量低。但是,如果所有工作負載都落在幾秒鐘內,則請求可能受到限流。

要解決此問題,請確定您的資料表有足夠的容量以處理流量,並使用指數退避再進行受限流的請求一次。如果您使用 AWS SDK,則預設情況下會實作此邏輯。如需詳細資訊,請參閱錯誤重試和指數退避

**注意:**DynamoDB 不一定會在每秒消耗的容量超過佈建的容量後開始限流資料表。透過高載容量功能,DynamoDB 會為日後的輸送量爆量保留一部分未使用的容量以因應尖峰時間使用量。

您已啟用 AWS 應用程式自動擴展,但資料表仍被限流

AWS 應用程式自動擴展不是解決 DynamoDB 資料表突然出現尖峰流量的適當解決方法。只有已耗用容量單位的兩個連續資料點超過一分鐘範圍內設定的目標使用率值時,應用程式自動擴展才會啟動自動擴展。只有耗用的容量連續兩分鐘比目標使用率高時,應用程式自動擴展才會自動擴展佈建的容量。此外,CloudWatch 已耗用容量的 15 個連續資料點比目標使用率低時,也會啟動縮減事件。 啟動應用程式自動擴展後,會叫用 UpdateTable API 呼叫,可能需要幾分鐘的時間來更新 DynamoDB 資料表或索引的佈建容量。應用程式自動擴展需要具有較高目標使用率值的連續資料點,才能擴展 DynamoDB 資料表的佈建容量。在此期間,超出資料表佈建容量的任何請求都會受到限流。因此,使用應用程式自動擴展以處理 DynamoDB 尖峰工作負載不是最佳實務,您可能會考慮在該使用案例切換到隨需模式。如需詳細資訊,請參閱使用 DynamoDB 自動擴展,自動管理輸送量容量

您的資料表使用隨需容量模式,但資料表仍被限流

資料表使用隨需容量模式時,只要符合下列條件,資料表就不會限流:

  • 存取模式平均分佈在分區之間,以避免與熱分區相關的問題。
  • 資料表不超過先前尖峰流量的兩倍。

對於隨需資料表,DynamoDB 會在流量增加時自動配置更多容量,以確保您的工作負載不會遇到限流。但是,如果 30 分鐘內,流量超過上一個個尖峰的兩倍,則可能會發生限流。如需詳細資訊,請參閱尖峰流量和擴展屬性

資料表有一個熱分區

在 DynamoDB 中,沒有高基數的分區金鑰可能會導致許多僅針對少數分區的請求,並產生熱分區。如果超過每秒 3000 RCU 或 1000 WCU (或兩者的組合) 的分區上限,熱分區可能會造成限流。

要在資料表找到存取次數最多和限流最多的項目,請使用 Amazon CloudWatch Contributor Insights。Amazon CloudWatch Contributor Insights 是一種診斷工具,可提供 DynamoDB 資料表流量趨勢的摘要圖,並協助您識別最常存取的分區金鑰。使用此工具,您可以持續監控資料表項目存取模式的圖表。熱分區可能會降低資料表的整體效能。要避免此類效能不佳的問題,請盡可能在您的資料表中平均分佈讀取和寫入作業。如需詳細資訊,請參閱設計分區金鑰以平均分佈工作負載選擇正確的 DynamoDB 分區金鑰

**注意:**針對 DynamoDB 使用 CloudWatch Contributor Insights 工具會產生額外費用。如需詳細資訊,請參閱 CloudWatch Contributor Insights 的 DynamoDB 計費

資料表的流量超過您的帳戶輸送量配額

資料表層級讀取輸送量和資料表層級寫入輸送量配額適用任何區域的帳戶層級。這些配額適用同時具有佈建容量模式和隨需容量模式的資料表。預設情況下,放置在資料表的輸送量配額為 40,000 個讀取請求單位和 40,000 個寫入請求單位。如果資料表的流量超過此配額,資料表可能會受到限流。要解決此問題,使用 Service Quotas 主控台以增加您帳戶的資料表層級讀取或寫入輸送量配額。


相關資訊

使用寫入碎片以平均分配工作負載

AWS 官方
AWS 官方已更新 2 年前