【问题标题】:DynamoDB provisioned Write Capacity Units exceeded too often and unexpectedlyDynamoDB 预置的写入容量单位过于频繁且意外超出
【发布时间】:2018-09-30 01:11:32
【问题描述】:

我相信我了解写入/读取容量单位、它们的工作方式以及在 DynamoDB 中的计算方式。证明是我完全理解this 文章以及aws documentation。也就是说,我在将项目写入表时遇到了意外行为。

我有一个具有以下设置的 DynamoDB 表。最值得注意的是 5 个写入/读取容量单位

我将连接到 Raspberry Pi 的传感器的读数放入此表中,我使用 python2.7 获取并发送到 Dynamo,使用 my script

这些项目肯定小于 1KB。它们看起来像这样:

{
    "reading_id": "<current_time>",
    "sensor_id": "<SENSORS_IDS[i]>",
    "humidity": "<humidity>",
    "temperature": "<temperature>"
}

My script 迭代传感器,从其中一个读取,然后每 5 秒使用table.put_item 将传感器的读数/项目提交给 DynamoDB。即如果从传感器读取成功,否则任意等待30s。

现在根据我的计算,我每 5 秒写入 DynamoDB 1KB 项目,这应该没问题,因为我的表设置为 5WCU = (5items*1KB)/Second write throughput。

所以我的问题是:

1。这个小负载(如果我相信正在发生的话)怎么会超过我的 5 个 WCU,如此处所示?:

2。我已经使用此设置运行了大约一年,没有进行任何更改(免费套餐于 2018 年 9 月 30 日结束)。怎么回事,几个月前甚至在免费层结束之前它就开始改变了,如下所示?:

到目前为止,我唯一的嫌疑人是time.sleep(),因为在文档中,它说:

time.sleep(秒)

在给定的秒数内暂停当前线程的执行。该参数可以是一个浮点数,以指示更精确的睡眠时间。实际的挂起时间可能少于请求的时间,因为任何捕获的信号都会在执行该信号的捕获例程后终止 sleep()。此外,由于系统中其他活动的调度,暂停时间可能比请求的时间长。

我对 python 不是很熟悉,这让我觉得它可能是我的代码中的东西。不过,这并不能解释我在今年早些时候没有遇到这个问题的事实。

任何人对上述问题的答案有任何想法,或者我应该在哪里进一步调查此问题?

注意:我在这里搜索了谷歌和其他相关问题。似乎没有一个适用于我的情况。

谢谢。

【问题讨论】:

    标签: amazon-dynamodb


    【解决方案1】:

    也许您的表分区不均。您可能想了解DynamoDB Partitions and Data Distribution

    【讨论】:

    • 因此,感谢@mike-dinescu 的回答,我放弃了我配置的 WCU 不够用的可能性。你的观点是有道理的,因为我只有 3 个传感器,而 sensorId 是表的分区键。这意味着我的表只划分为 3。但我认为我的请求在 PK 中均匀分布,因为我的写入/读取模式是均匀分布的。我在想here 所说的:一个分区不应超过 1000WCU 但here 他们说如果分区已满,将分配一个新分区。还是一头雾水
    • @AlejandroFranco - 您的表尚未分区:在 200 MB 和 5 WCU 时,它仍然使用单个分区运行,因此所有 5 个容量单位都分配到所有传感器数据所在的同一分区实际上被写入。一旦达到 10GB,表将一分为二,每个分区中大约有 3 个 WCU(向上路由 2.5 个)。
    【解决方案2】:

    您分享的图表显示的是在一分钟内汇总的消耗量。也就是说,图表上每个数据点在每 60 秒内消耗的所有容量的总和。

    当您预置具有 5 个 WCU 的表时,这意味着您秒最多只能写入 5 个 1KB 项目。实际上,您每分钟总共可以使用多达 300 个 WCU。

    所以,只要你看到 6 个左右的数据点就完全没问题了。

    需要注意的一点是,预置写入吞吐量的 sum(橙色线)实际上不是总和。这似乎是 CloudWatch 中的一个错误:它是每秒预置吞吐量。

    一个小观察:您每分钟显示 5-6 个单位,这意味着您实际上睡了接近 10 秒,而不是两次写入之间的 5 秒。

    最后,使用 Dynamo,您需要为预留的容量付费,而不是为消耗的容量付费。因此,只要您的表没有受到限制,即使您稍微超出预置容量(Dynamo 在某些情况下允许),您也不会被收取额外费用。

    【讨论】:

    • 您的回答绝对为我澄清了图表。 5WCU 足以处理我在表的指标选项卡中找到的this more accurate graph 支持的写入速率。现在我怀疑问题可能是我的数据分布不均匀。
    • 我很抱歉@AlejandroFranco,但现在我很困惑。这些图表清楚地表明您消耗的容量是微不足道的。您基本上平均小于 1 W/秒,并且您的表配备了 5 个 WCU,因此它的容量显然比您使用的要多。您看到的具体问题是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 2013-08-08
    相关资源
    最近更新 更多