跳至内容

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

1 分钟阅读
0

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

解决方法

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

流量超过此前峰值的两倍

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

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

对于新的按需表,您可以立即同时驱动多达 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 中,将 ConsumedReadCapacityUnits 和 ConsumedWriteCapacityUnits 与当前的配额进行比较。
  2. 申请增加表级读写容量单位的账户级配额。

您的表的 GSI 会受到节流

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

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

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

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

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

相关信息

DynamoDB 节流解决方法指导

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

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

DynamoDB 中的配额

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

AWS 官方已更新 7 个月前