DynamoDB RequestLimitExceeded
TL;DR — 你超過了一個帳戶/表格層級的請求速率配額,而非表格自己的佈建容量。隨需表格預設為每秒 40,000 個讀取請求單位與 40,000 個寫入請求單位。保持 SDK 的退避重試、若流量是真實的就在 Service Quotas 中提高配額,並分散負載讓單一表格/partition 不是瓶頸。
這是什麼意思
RequestLimitExceeded: Throughput exceeds the current throughput limit for your
account. To request a limit increase, contact AWS Support.RequestLimitExceeded 是 DynamoDB 在資料平面回傳的三個節流例外之一(與 ProvisionedThroughputExceededException 及 ThrottlingException 並列)。它表示你觸及了帳戶層級的服務配額 — 例如隨需表格的每表格吞吐量配額 — 而非每表格佈建的 RCU/WCU 上限。它回傳 HTTP 400 且可重試 — SDK 自動退避並重試。錯誤帶有 ThrottlingReason 欄位(例如 TableWriteAccountLimitExceeded 或 IndexReadAccountLimitExceeded)加上受影響資源的 ARN。
為什麼會發生
- 隨需表格預設上限 — 每個隨需表格(及其每個 GSI)有可調整的預設配額,每秒 40,000 個讀取請求單位與 40,000 個寫入請求單位。持續消耗超過它會以帳戶層級的
ThrottlingReason節流,直到配額被提高。 - 表格在帳戶配額下無法進一步擴充 — 根據 AWS 文件,隨需請求的速率超過允許的帳戶吞吐量「且表格無法進一步擴充」。這些配額是後備防護,且可被提高。
- 新轉隨需的表格暖機中 — 全新的隨需表格(或剛切換到隨需的)立即服務最多它先前尖峰的兩倍;遠超過那個的更大尖峰可能在它擴充前就節流。
- 單一熱表格吸收遠高於其近期尖峰的流量尖峰。
如何修正
- 保持指數退避重試開啟 — SDK 預設處理暫時性尖峰。對突發工作負載使用 adaptive retry 模式。不要停用重試。
- 提高配額 — 若流量合法且持續,在 Service Quotas 中請求提高每表格隨需吞吐量(或帳戶表格數量/吞吐量配額)。
- 在已知尖峰前預熱 — 增長流量而非直接跳到尖峰,讓隨需擴充保持領先需求。
- 分散負載 — 分片熱鍵並分散寫入,讓一個表格/partition 不承載整個尖峰(熱 partition 模式)。
- 快取熱讀取(DAX 或應用快取)以將讀取壓力卸到上限以下。
常見問題
RequestLimitExceeded 與 ProvisionedThroughputExceededException 有何不同? ProvisionedThroughputExceededException 表示一個佈建容量表格超過了它自己設定的 RCU/WCU。RequestLimitExceeded 表示你觸及了帳戶或表格層級的請求速率配額 — 最常見的是隨需預設的每秒 40,000 個讀取與 40,000 個寫入請求單位 — 與單一表格的每表格設定無關。
RequestLimitExceeded 可以重試嗎? 可以。它是一個節流錯誤,AWS SDK 以指數退避自動重試它。持續發生表示你需要配額增加或分散負載,而非更多重試。
相關錯誤
- ProvisionedThroughputExceededException — 每表格佈建容量超過。
- ThrottlingException — 控制平面 / 一般速率限制。
- 學習:On-demand vs provisioned · Hot partitions
參考資料
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Troubleshooting throttling in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB on-demand capacity mode — Amazon DynamoDB Developer Guide
最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。