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

1 分钟阅读
0

对我的 Amazon DynamoDB 预调配表的读取或写入操作受到限制。或者,当我对 DynamoDB 预调配表执行读取或写入操作时,收到以下错误: “ProvisionedThroughputExceededException.”

简短描述

在以下常见情况下,您可能会遇到 DynamoDB 预调配表受限制:

  • 您的 DynamoDB 表具有足够的预调配容量,但大多数请求都受到限制。
  • 您启用了 AWS Application Auto Scaling for DynamoDB,但您的 DynamoDB 表受到限制。
  • 您的表中有一个热分区。
  • 您的表流量超过了您的账户吞吐量配额。

解决方法

**注意:**有关在限制事件期间必须监控的 DynamoDB 指标(如 WriteThrottleEvents 和 ReadThrottleEvents)的信息,请参阅 DynamoDB 指标与维度

根据使用场景,请完成下面的任务。

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

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

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

**注意:**每秒消耗的容量超过预调配容量后,DynamoDB 不会开始限制表。借助容量爆增功能,DynamoDB 会保留一部分未使用的容量,以供以后的爆增吞吐量使用,从而应对使用高峰。有关更多信息,请参阅预置容量模式Amazon DynamoDB 如何处理短时间间隔内的峰值负载?

您启用了 AWS Application Auto Scaling for DynamoDB,但您的 DynamoDB 表受到限制

AWS Application Auto Scaling 不是解决 DynamoDB 表流量突然激增的合适解决方案。当已消耗容量单位的两个连续数据点在一分钟内超过配置的利用率值时,Application Auto Scaling 将启动纵向扩展。只有当已消耗容量持续两分钟高于目标利用率时,Application Auto Scaling 才会自动扩展预置容量。

当 CloudWatch 中已消耗容量的 15 个连续数据点低于目标利用率时,将启动缩减事件。在启动 Application Auto Scaling 后,将调用 UpdateTable API 调用。API 调用可能需要几分钟来更新 DynamoDB 表或索引的预调配容量。Application Auto Scaling 需要具有更高目标利用率值的连续数据点来纵向扩展 DynamoDB 表的预调配容量。在此期间,任何超过表的已调配容量的请求都会受到限制。最好不要使用 Application Auto Scaling 来处理 DynamoDB 中的高峰工作负载。而是切换到按需模式。有关更多信息,请参阅使用 DynamoDB Auto Scaling 自动管理吞吐能力

您的表中有一个热分区

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

要在表中查找访问次数最多和受限制最多的项,请使用 Amazon CloudWatch Contributor Insights。Amazon CloudWatch Contributor Insights 是一种诊断工具,可提供 DynamoDB 表流量趋势的汇总视图。可使用此工具来确定最常访问的分区键,并持续监控表的项访问模式图表。

热分区可能会降低表的总体性能。为了避免这种糟糕的性能,请在表中尽可能均匀地分配读写操作。有关更多信息,请参阅设计分区键来分配工作负载Choosing the right DynamoDB partition key

此外,可以在热键上实现写入分片,以增加基数并允许热键跨越多个分区。有关更多信息,请参阅使用写入分片均匀分配工作负载。使用指数回退来重试受限制的请求。如果使用 AWS SDK,则默认实现此逻辑。有关更多信息,请参阅错误重试和指数回退

当预计流量较高时,最好将预调配容量增加到一个较高的值。预调配容量的增加会导致后端的分区数量增加。

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

您的表流量超过了您的账户吞吐量配额

表级读取吞吐量和表级写入吞吐量配额在任何 AWS 区域的账户级别生效。这些配额适用于预调配容量模式和按需容量模式的表。默认情况下,表的吞吐量配额为 40,000 个读取请求单位和 40,000 个写入请求单位。如果表流量超过此配额,则该表可能会受到限制。

要解决此问题,请使用 Service Quotas console 为您的账户增加表级读取或写入吞吐量配额。

相关信息

设计分区键并有效使用的最佳实践

AWS 官方
AWS 官方已更新 1 年前
没有评论