DynamoDB RequestLimitExceeded
TL;DR — 你超过了一个账户/表级请求速率配额,而不是一张表自己的预置容量。按需表默认为每秒 40,000 读请求单元和 40,000 写请求单元。保持 SDK 的退避重试,如果流量是真实的就在 Service Quotas 中提高配额,并分散负载,使得单张表/分区不成为瓶颈。
含义
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 默认能处理瞬时峰值。对突发工作负载使用自适应重试模式。别禁用重试。
- 提高配额——如果流量是合法且持续的,就在 Service Quotas 中请求提高逐表按需吞吐量(或账户表数/吞吐量配额)。
- 在已知峰值前预热——把流量逐渐拉升而不是直接跳到峰值,让按需扩展领先于需求。
- 分散负载——对热点键分片并分散写入,使得单张表/分区不承载整个峰值(热点分区模式)。
- 缓存热读(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 官方文档。