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 官方文档。