为什么我的 Amazon DynamoDB 表受到限制?

上次更新时间:2022 年 8 月 16 日

我的 Amazon DynamoDB 表上的读取或写入操作被限制。

-或者-

当我对 DynamoDB 表执行读取或写入操作时,我遇到 ProvisionedThroughputExceededException。

简短描述

以下是您可能会遇到的一些常见限制问题:

  • 您的 DynamoDB 表具有足够的预置容量,但大多数请求都受到限制。
  • 您为 DynamoDB 激活了 AWS Application Auto Scaling,但您的 DynamoDB 表受到限制。
  • 您的 DynamoDB 表处于按需容量模式,但该表正受到限制。
  • 您的表中有一个热分区。
  • 您的表的流量超出了您的账户吞吐量限额。

解决方法

有关在限制事件期间必须监控的 DynamoDB 指标的信息,请参阅 DynamoDB 指标和维度。这些指标可以帮助您找到创建受限请求的操作,并确定产生限制的原因。根据您的使用案例使用以下一个或多个故障排除选项。

您的 DynamoDB 表具有足够的预置容量,但大多数请求都受到限制

DynamoDB 向 Amazon CloudWatch 报告分钟级别的指标。这些指标计算为一分钟的总和,然后计算平均值。但是,DynamoDB 速率限制是按秒应用的。例如,如果您为 DynamoDB 表预置了 60 个写入容量单位,则可以在一分钟内执行 3600 次写入操作。但是,在一秒钟内驱动所有 3600 个请求,而其余时间没有任何请求,就可能会产生限制。每分钟读取容量单位或写入容量单位的总数可能低于表的预置吞吐量。但是,如果所有工作负载都在几秒钟内执行,则请求可能会受到限制。

要解决此问题,请确保您的表有足够的容量来处理您的流量,并使用指数回退重试受限制的请求。如果您使用的是 AWS SDK,则默认情况下会实现此逻辑。有关更多信息,请参阅错误重试和指数回退

注意:每秒消耗的容量超过预置容量后,DynamoDB 不一定会开始限制表。借助容量暴增功能,DynamoDB 将一部分未使用的容量预留给以后暴增的吞吐量,以应对使用高峰。

您激活了 AWS Application Auto Scaling,但您的表仍然受到限制

AWS Application Auto Scaling 不是解决 DynamoDB 表突然流量激增的合适解决方案。仅当已消耗容量单位的两个连续数据点在一分钟内高于配置的目标利用率值时,Application Auto Scaling 才会启动纵向扩展。仅当消耗的容量持续两分钟高于目标利用率时,Application Auto Scaling 才会自动扩展预置容量。此外,当 CloudWatch 中已消耗容量的连续 15 个数据点低于目标利用率时,将启动缩减事件。启动 Application Auto Scaling 后,将调用 UpdateTable API 调用,该调用可能需要几分钟时间才能更新 DynamoDB 表或索引的预置容量。Application Auto Scaling 需要具有较高目标利用率值的连续数据点来扩展 DynamoDB 表的预置容量。在此期间,任何超出表预置容量的请求都将受到限制。因此,在 DynamoDB 中使用 Application Auto Scaling 来处理高峰工作负载并不是最佳实践,您可以考虑在该使用案例中切换到按需模式。有关更多信息,请参阅使用 DynamoDB Auto Scaling 自动管理吞吐能力

您的表使用按需容量模式,但该表仍然受到限制

当表使用按需容量模式时,只要满足以下条件,表就不会受到限制:

  • 访问模式在各个分区之间均匀分布,以避免与热分区相关的问题。
  • 该表没有超过之前峰值流量的两倍。

对于按需表,随着流量的增加,DynamoDB 会自动分配更多容量,以确保您的工作负载不会遇到限制。但是,如果流量在 30 分钟内达到上一个峰值的两倍以上,则可能会发生限制。有关更多信息,请参阅峰值流量和扩展属性

您的表中有一个热分区

在 DynamoDB 中,基数不高的分区键可能会导致许多请求仅针对少数几个分区,从而产生热分区。如果超过每秒 3000 个 RCU 或 1000 个 WCU (或两者的组合) 的分区限制,则热分区可能会导致限制。

要查找表中访问量最大和受限最多的项目,请使用 Amazon CloudWatch Contributor Insights。Amazon CloudWatch Contributor Insights 是一种诊断工具,您可以使用它汇总查看 DynamoDB 表的流量趋势,并可用于识别最常访问的分区键。使用此工具,您可以持续监控表中项目访问模式的图形。热分区可能会降低表的总体性能。为避免这种性能不佳的情况,请在整个表中尽可能均匀地分配读取和写入操作。有关更多信息,请参阅设计分区键以均匀分配工作负载选择正确的 DynamoDB 分区键

注意:使用适用于 DynamoDB 的 CloudWatch Contributor Insights 工具会产生额外费用。有关更多信息,请参阅适用于 DynamoDB 的 CloudWatch Contributor Insights 的计费

您的表的流量超出了您的账户吞吐量限额

表级读取吞吐量和表级写入吞吐量限额适用于任何区域中的账户级别。这些限额适用于同时具有预置容量模式和按需容量模式的表。默认情况下,表的吞吐量限额为 4 万个读取请求单位和 4 万个写入请求单位。如果您的表的流量超过此限额,则该表可能会受到限制。要解决此问题,请使用服务限额控制台增加账户的表级读取或写入吞吐量限额。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?