DynamoDB on-demand throughput exceeded

TL;DR — 是的,按需表仍然会限流。三个原因:你设置了一个最大吞吐量(MaxReadRequestUnits/MaxWriteRequestUnits)并超过了它;你在 30 分钟内驱动了超过先前流量峰值两倍的流量;或者你触及了一个表级配额(默认每张表 40,000 读请求单元和 40,000 写请求单元)。提高或移除最大值、逐渐爬升流量,并保持指数退避重试。

含义

ThrottlingException: Rate of requests exceeds the allowed throughput.

按需模式会扩展以容纳流量,但不是瞬时的,也不是没有上限的。新的按需表能立即支撑每秒最多 4,000 次写入和 12,000 次读取,而按需模式能立即容纳先前流量峰值的两倍。超过一个配置的最大值、在 30 分钟内跑赢那个翻倍,或越过一个配额,都会表现为限流——ThrottlingException 是 HTTP 400 且可重试,错误携带 ThrottlingReason 字段(例如 IndexWriteMaxOnDemandThroughputExceeded),指明被触及的资源和限制。

为什么会发生

  • 一个配置的最大吞吐量——你设置了 MaxReadRequestUnits/MaxWriteRequestUnits 而需求越过了它;DynamoDB 返回一个 ThrottlingException(这是你选择的一个成本控制上限,尽力而为地应用)。
  • 快于先前峰值的 2 倍——按需模式能立即容纳先前峰值的两倍,但如果你在 30 分钟内超过那个峰值的两倍,就可能发生限流。
  • 冷启动爬升——一张全新的表(或创建后立即的批量加载)超过了每秒 4,000 次写入和 12,000 次读取的初始基线。
  • 表级配额——每张表默认 40,000 读请求单元和 40,000 写请求单元的上限;账户级配额越限会表现为 RequestLimitExceeded
  • 一个热点分区——流量集中在一个分区键上,无论表模式如何它都有自己的逐分区限制。

如何修复

  1. 提高配置的最大值——通过 UpdateTable 增大 MaxReadRequestUnits/MaxWriteRequestUnits,或把值设为 -1 以移除你的自定义上限(服务配额仍然适用)。
  2. 在已知峰值前预热——使用 DynamoDB 的 warm throughput 设置,或把流量增长分散在至少 30 分钟内,让按需模式的翻倍领先于需求,而不是追赶一个阶跃变化。
  3. 保持指数退避重试——SDK 默认会重试限流;对突发负载使用自适应重试模式。
  4. 限制批量导入的节奏,或使用 S3 导入功能,而不是猛敲一张新表。
  5. 分散键空间,使得没有单个分区键变热——即使表有余量,一个热点分区也会限流。
  6. 请求配额提升,如果你确实需要在一张表上超过 40,000 读/写请求单元。

在追查哪个键在吸收请求?在 DynoTable 桌面应用中浏览并过滤表,在热点分区键封顶你的吞吐量之前找到它。

常见问题

一张 DynamoDB 按需表会被限流吗? 会。按需表会在以下情况限流:你超过了一个配置的最大吞吐量、在 DynamoDB 完成扩展之前驱动了超过先前流量峰值两倍的流量、越过了每张表默认 40,000 读和 40,000 写请求单元的配额,或者把流量集中在一个热点分区键上。

我如何提高按需吞吐量限制? 通过 UpdateTable 增大 MaxReadRequestUnits/MaxWriteRequestUnits,或把值设为 -1 以移除你的自定义上限——账户配额仍然适用。如果你需要超过每张表默认 40,000 请求单元,请请求配额提升。

相关错误

参考资料

最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。

无需控制台即可使用 DynamoDB

一款快速的 DynamoDB 桌面客户端,可运行 DynamoDB 无法执行的真正 SQL——JOINs、GROUP BY、聚合——并支持可视化编辑和运行在你自己的 Bedrock 密钥上的 AI agent。

30 天免费试用,无需信用卡 — 之后为无时间限制的免费版。