在使用按需容量的 DynamoDB 中,可用容量何时下降?
In DynamoDB using On-demand capacity, when does the available capacity ramp down?
我正在解决配置为按需模式的 DynamoDB table 的节流问题。我们有一个 table,它的平均负载非常低,但峰值要大得多。在其中一些高峰期间,我们会看到节流错误。我从 DynamoDB Developer's Guide 中看到,在 window 30 分钟后,峰值容量增加到之前峰值的两倍。我们什么时候可以预计这种产能会下降?在下图中,我看到在 24 小时多一点的时间段内,容量没有受到约 3.4K 写入容量单位 (WCU) 的限制,然后在第二天,容量受到小于该数量的限制。
所以我想了解的是,是否有任何规则或指南可以管理容量从之前的高水位线逐渐下降的行为?看起来这会在不到 24 小时内发生,但我想更精确一些。
当它是按需容量模式时,容量本身没有增加或减少的能力。引擎盖下的是分区,每个分区可以处理 3000 IOPS(读取为 1 IOPS,写入为 3 IOPS)。因此,您提到的文档部分所指的是 DynamoDB 试图在可以支持您尝试执行的 IOPS 数量的可用分区数量上保持领先。您可以将 table“扩大”到 table 之前支持的 IOPS 高水位线的两倍。让我们看一个具体的例子。任何处于按需容量模式的 table 都可以支持 12,000 IOPS,这意味着它至少有 4 个分区。 12,000 IOPS 是您可以“默认”支持的。接下来,您开始处理一些流量并达到 10,000 IOPS。 DynamoDB 将看到这一点,做出反应,并开始代表您添加分区。 “嘿,这个 table 已经接近最大值,我最好添加更多分区。”但这不是瞬间的。 DynamoDB 尝试保留足够的分区以支持您将之前的高水位线达到峰值。我过于简单化了它代表您所做的事情,但希望您能理解。
综上所述,如果屏幕上显示的数字是您使用过的最大容量(我们只查看大约一天的一部分),那么您看到的节流可能是由于除了能力之外的东西。它可能是一个热键。您是否尝试过打开 CloudWatch Contributor Insights 一点,让它收集数据,看看是否可以确定是否有热键?那将是我的下一步。你不必打开它很长时间,它确实要花钱,但足够长的时间来获得一些关于正在发生的事情的真实数据。
如果您不熟悉热键,热键是一个术语,用于指代 DynamoDB table 中被多次读取或写入的项目:1/ 该项目单独命中每个分区主要针对该项目的 IOPS 限制 (3000) 或 2/ 请求,结合分区中的其他项目足以达到每个分区的 IOPS 限制。在 #2 的情况下,DynamoDB 会代表您自动将热门项目移动到现有的较少使用的分区或新分区。根据 table 的配置,DynamoDB 将或多或少积极地移动热项以限制热分区。如果热门项目本身就是麻烦制造者,DynamoDB 可能会尝试将其隔离在自己的分区中,但在某些时候它仍可能达到分区 IOPS 限制并因此导致节流。 DynamoDB 采取此操作是一种被动措施,它会随着时间的推移尽最大努力为您缓解问题。最佳做法是首先通过设计密钥架构来避免这种情况,从而避免出现这种情况。
由于以下几个问题,可能会出现热键:
- 最常见的原因是选择分区键时架构设计不正确
- select 几个键上的流量意外增加。
- 未考虑的新访问模式
我正在解决配置为按需模式的 DynamoDB table 的节流问题。我们有一个 table,它的平均负载非常低,但峰值要大得多。在其中一些高峰期间,我们会看到节流错误。我从 DynamoDB Developer's Guide 中看到,在 window 30 分钟后,峰值容量增加到之前峰值的两倍。我们什么时候可以预计这种产能会下降?在下图中,我看到在 24 小时多一点的时间段内,容量没有受到约 3.4K 写入容量单位 (WCU) 的限制,然后在第二天,容量受到小于该数量的限制。
所以我想了解的是,是否有任何规则或指南可以管理容量从之前的高水位线逐渐下降的行为?看起来这会在不到 24 小时内发生,但我想更精确一些。
当它是按需容量模式时,容量本身没有增加或减少的能力。引擎盖下的是分区,每个分区可以处理 3000 IOPS(读取为 1 IOPS,写入为 3 IOPS)。因此,您提到的文档部分所指的是 DynamoDB 试图在可以支持您尝试执行的 IOPS 数量的可用分区数量上保持领先。您可以将 table“扩大”到 table 之前支持的 IOPS 高水位线的两倍。让我们看一个具体的例子。任何处于按需容量模式的 table 都可以支持 12,000 IOPS,这意味着它至少有 4 个分区。 12,000 IOPS 是您可以“默认”支持的。接下来,您开始处理一些流量并达到 10,000 IOPS。 DynamoDB 将看到这一点,做出反应,并开始代表您添加分区。 “嘿,这个 table 已经接近最大值,我最好添加更多分区。”但这不是瞬间的。 DynamoDB 尝试保留足够的分区以支持您将之前的高水位线达到峰值。我过于简单化了它代表您所做的事情,但希望您能理解。
综上所述,如果屏幕上显示的数字是您使用过的最大容量(我们只查看大约一天的一部分),那么您看到的节流可能是由于除了能力之外的东西。它可能是一个热键。您是否尝试过打开 CloudWatch Contributor Insights 一点,让它收集数据,看看是否可以确定是否有热键?那将是我的下一步。你不必打开它很长时间,它确实要花钱,但足够长的时间来获得一些关于正在发生的事情的真实数据。
如果您不熟悉热键,热键是一个术语,用于指代 DynamoDB table 中被多次读取或写入的项目:1/ 该项目单独命中每个分区主要针对该项目的 IOPS 限制 (3000) 或 2/ 请求,结合分区中的其他项目足以达到每个分区的 IOPS 限制。在 #2 的情况下,DynamoDB 会代表您自动将热门项目移动到现有的较少使用的分区或新分区。根据 table 的配置,DynamoDB 将或多或少积极地移动热项以限制热分区。如果热门项目本身就是麻烦制造者,DynamoDB 可能会尝试将其隔离在自己的分区中,但在某些时候它仍可能达到分区 IOPS 限制并因此导致节流。 DynamoDB 采取此操作是一种被动措施,它会随着时间的推移尽最大努力为您缓解问题。最佳做法是首先通过设计密钥架构来避免这种情况,从而避免出现这种情况。
由于以下几个问题,可能会出现热键:
- 最常见的原因是选择分区键时架构设计不正确
- select 几个键上的流量意外增加。
- 未考虑的新访问模式