跳至内容

为什么 DynamoDB 按需模式表被限流?

1 分钟阅读
0

我的 Amazon DynamoDB 按需模式表被限流,但我不知道原因。

解决方案

使用按需容量模式的 DynamoDB 表会自动适应应用程序的流量大小。但是,以下情况可能会导致您的按需 DynamoDB 表被节流。

流量超过此前峰值的两倍

当流量在 30 分钟内超过之前峰值吞吐量的两倍时,DynamoDB 按需表可能会受到节流。

要解决此问题,请在至少 30 分钟内逐步扩大流量,然后再达到之前峰值的两倍。要监控表的吞吐量,请使用 Amazon CloudWatch 中的 ConsumedReadCapacityUnitsConsumedWriteCapacityUnits 指标。要监控按需节流,请使用 ReadMaxOnDemandThroughputThrottleEventsWriteMaxOnDemandThroughputThrottleEvents

对于新的按需模式表,您可以立即获得最高 4,000 个写入请求单元、12,000 个读取请求单元或者二者的线性组合。对于计划内或高峰期事件,使用热吞吐量将表的容量扩展到预期使用量。

如果将现有表切换到按需容量模式,则此前流量峰值为以下值之一:

  • 新表一开始有 4,000 个写入容量单位 (WCU) 和 12,000 个读取容量单位 (RCU)。
  • 如果您预置的表高于起始值,则它会保留更高的容量。
  • 在持续使用模式下,初始容量可能会更高。

流量超过了每个分区的最大吞吐量

表上的每个分区最多可以提供 1,000 个写入请求单元、3,000 个读取请求单元或者二者的线性组合。如果分区的流量超过此配额,则该分区可能会被节流。

要解决此问题,请完成以下步骤:

  1. 使用 CloudWatch Contributor Insights for DynamoDB 来识别表中最常访问和最常被节流的键。
  2. 使用增强的指标来验证分区节流事件是否是原因。
  3. 使用写入分片在分区之间均匀分配请求。
  4. 优化错误重试和指数回退策略

流量超出每个表的 AWS 账户限额

默认情况下,按需表的账户级别配额为 40,000 个 WCU,每个表的账户级别配额为 40,000 个 RCU。如果表的流量超出吞吐量配额,则该表可能会被节流。

要解决此问题,请完成以下步骤:

  1. 在 CloudWatch 中,将 ConsumedReadCapacityUnitsConsumedWriteCapacityUnits 与当前的配额进行比较。
  2. 申请增加表级读写容量单位的账户级配额

您的表的 GSI 会受到节流

如果您的 DynamoDB 表的 GSI 处于节流状态,则节流可能会在基表上产生反压节流。有关详细信息,请参阅了解 DynamoDB 中的全局二级索引 (GSI) 写入节流和背压以及在 DynamoDB 中使用 GSI

流量超出配置的最大吞吐量

如果您为按需表配置了最大吞吐量配额,则在超出吞吐量配额时会出现“ThrottlingException”错误。

根据您的使用案例,执行以下操作之一:

要监控您为表或 GSI 配置的最大吞吐量,请使用 CloudWatch 中的 OnDemandMaxReadRequestUnitsOnDemandMaxWriteRequestUnits 指标。

相关信息

DynamoDB 节流解决方法指导

如何为我的 DynamoDB 表选择合适的主键?

为什么 DynamoDB 上的指标与 CloudWatch 指标不同?

DynamoDB 中的配额

Introducing configurable maximum throughput for DynamoDB on-demand(DynamoDB 按需模式可配置的最大吞吐量简介)

AWS 官方已更新 1 个月前