DynamoDB ThrottlingException
TL;DR — 你的請求速率超過了某個限制。它可重試——退避並重試(SDK 預設這樣做)。如果它持續,說明你在過於頻繁地呼叫一個控制平面 API(CreateTable、UpdateTable、DescribeTable),或觸及了一個帳戶級限制。
這是什麼意思
ThrottlingException: Rate of requests exceeds the allowed throughput.ThrottlingException(以及相關的 RequestLimitExceeded)表示一個速率限制,它不是一張預置表自己的 RCU/WCU 設定。它以 HTTP 400 返回且可重試。它在過於快速執行的控制平面操作上最常見,而且——對按需表——當請求速率過高時(包括當你超過一個配置的最大按需吞吐量時),任何資料平面操作都可能返回它。錯誤攜帶 ThrottlingReason 欄位,指明被限流的資源和被觸及的限制。
為什麼會發生
- 輪詢控制平面 API——在一個緊湊的迴圈中呼叫
DescribeTable、ListTables、UpdateTable(例如等待一張表變為ACTIVE)。 - 快速建立/刪除許多表——並行的控制平面操作有上限(同時處於
CREATING/UPDATING/DELETING的表/索引不超過 500 個)。 - 一個配置的按需最大吞吐量——在一張按需表或 GSI 上超過
MaxReadRequestUnits/MaxWriteRequestUnits會返回ThrottlingException。 - 一張按需表上的突然突發——新表從每秒 4,000 次寫入和 12,000 次讀取開始,在 30 分鐘內超過先前峰值的兩倍可能限流,直到 DynamoDB 擴充套件。
如何修正
- 用指數退避 + 抖動重試——AWS SDK 會自動這樣做;保持重試開啟並考慮自適應重試模式。
- 停止緊湊輪詢控制平面 API。 使用等待器(
waitUntilTableExists),它們按合理的計劃輪詢,而不是一個熱迴圈。 - 批次並控制資料平面寫入的節奏。 逐漸拉昇批次載入,讓按需容量能與你一起擴充套件。
- 把表操作分散在一段時間內,而不是一次建立幾十個。
範例
import {DynamoDBClient} from '@aws-sdk/client-dynamodb';
import {waitUntilTableExists} from '@aws-sdk/client-dynamodb';
const client = new DynamoDBClient({});
// a waiter polls on a backoff schedule — not a tight DescribeTable loop
await waitUntilTableExists({client, maxWaitTime: 120}, {TableName: 'Orders'});常見問題
ThrottlingException 與 ProvisionedThroughputExceededException 相同嗎?
不會。ProvisionedThroughputExceededException 是超出表的預配置容量時出現的資料平面錯誤。 ThrottlingException 在控制平面操作(CreateTable、UpdateTable、DescribeTable)中最常見,這些操作具有較低的帳戶範圍限制,並且在非常高的流量突發情況下。
如何修復 DynamoDB ThrottlingException?
使用指數退避和抖動重試 — AWS SDK 自動執行此操作。停止嚴格輪詢的控制平面 API(使用waitUntilTableExists等服務者),逐漸增加批次負載,以便按需容量可以隨你擴充套件,並隨著時間的推移擴充套件表操作。
在 DynoTable 中檢查大小
當控制平面限制阻止表設定時,請使用 DynoTable 瀏覽現有表,而不是迴圈輪詢 DescribeTable — 在單次重新整理後使用 ⌘K 開啟表。對於觸發按需限制的批次負載,請在斜坡之前使用 pricing calculator 調整流量大小。使用 ⌘P 切換設定檔案; 設定→設定檔案中的Test Connection**確認帳戶。參見連線 AWS和安裝。
來源
- Error handling with DynamoDB — ThrottlingException(2026-07-13 驗證)
- Troubleshooting throttling in Amazon DynamoDB(2026-07-13 驗證)
相關錯誤
- ProvisionedThroughputExceededException——逐表容量限流。
- RequestLimitExceeded——帳戶請求速率配額。
- On-demand throughput exceeded——按需表仍然會限流。
- ResourceInUseException——表繁忙/已經存在。
- 學習:On-demand vs provisioned
參考資料
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Troubleshooting throttling in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB on-demand capacity mode — Amazon DynamoDB Developer Guide
- DynamoDB maximum throughput for on-demand tables — Amazon DynamoDB Developer Guide
最後核實於 2026-07-13,依據上方連結的 AWS 官方文件。