【问题标题】:Cannot write to AWS Timestream table and dealing with ActiveMagneticStorePartitions caused throttling无法写入 AWS Timestream 表并处理 ActiveMagneticStorePartitions 导致节流
【发布时间】:2023-01-19 17:44:33
【问题描述】:

一段时间以来,我成功地将一些旧数据导入到 Timestream 表中,但随后开始出现错误:

Timestream error: com.amazonaws.services.timestreamwrite.model.ThrottlingException: Your magnetic store writes to Timestream are throttled for this database. Refer to Timestream documentation for 'ActiveMagneticStorePartitions' metric to prevent recurrence of this issue or contact AWS support.

它所指的指标提高到 250 的限制,但它在一段时间后下降到 0,即使在那之后,当我开始导入时,它立即达到限制并再次出现错误,所以根本没有导入任何东西。

我不是并行运行导入,而是一次只运行一个,但它仍然会引发错误。

作为一种解决方法,我决定增加该表的内存保留期,但由于某种原因,即使在新的内存保留期内导入数据时,仍然会出现相同的错误。

【问题讨论】:

    标签: amazon-web-services amazon-timestream


    【解决方案1】:

    如果您正在摄取旧数据,则应尝试按时间戳对数据进行排序。这将有助于创建更少的活动分区。 然后,在将旧数据插入 Timestream 之前,您应该检查活动分区。

    我多次与 AWS 支持团队会面,以了解将数据提取到磁存储中的最佳方式(内存存储没有此限制)。他们建议摄取按时间戳排序的数据。因此,如果您有多个设备,则应该按时间戳而不是按设备来摄取数据。

    活动分区背后的标准并不明确,他们总是谈论可能性......

    我已经运行负载测试以将相同的数据提取到磁性存储中,但最终得到不同数量的活动分区。

    以下是我的负载测试结果:

    我摄取2142288属于 2022 年 1 月的记录,它将使用我当前的时间流配置写入磁性存储中。在每次执行之间,我增加了记录版本以覆盖以前的记录。

    一月(活动分区总数:0)

    • 摄取 2142288 条记录 -> 新的 16 个活动分区(新:16)
    • 摄取 2142288 条记录 -> 新的 16 个活动分区(新:16,总计:32)
    • 摄取 2142288 条记录 -> 新的 16 个活动分区(新:16,总计:48)
    • 摄取 2142288 条记录 -> 新的 0 个活动分区(新:0,总数:48)
    • 摄取 2142288 条记录 -> 新的 0 个活动分区(新:0,总数:48)

    不等待活动分区降为零,我摄取了1922784属于 2022 年 2 月的记录。

    二月(活动分区总数:48)

    • 摄取 1922784 条记录 -> 新的 0 个活动分区(新:0,总数:48)

    我等到活动分区减少到零,增加记录版本并运行相同的测试

    二月(活动分区总数:0)

    • 摄取 1922784 条记录 -> 新的 82 个活动分区(新:0,总计:82)

    如您所见,关于活动分区的创建没有明确的模式,但如果您按时间戳对数据进行排序,则在将数据提取到磁性存储中时,您将更有可能成功。

    【讨论】:

    • 谢谢娟池的回答!我将进一步研究细节,但只需要提及我的数据实际上是按时间戳(降序)排序的,并且错误是在摄取开始时出现的(有时是第一条消息)
    • @mico di 你有没有想过这个 - 有同样的问题,时间戳排序的数据立即跳到 250 个活动的磁性分区并失败。
    • @spaceman,不,我与 AWS 进行了很长时间的讨论,但没有成功。他们在谈论我的数据结构,但那是不相关的,无论如何都无法更改。我看到的唯一选择是创建一个新数据库并尝试对数据进行分片。
    • @mico 我们有一个包含数百万行的表。在我们同时摄取历史记录的同时,它正在直播。它多年来一直工作良好,但随后停止,此后任何历史导入几乎都会立即达到 250 个分区限制。我们昨天提出的解决方案是创建一个新的空表,将历史行导入其中,然后使用计划任务将它们导入到实际表中。出于某种原因,这工作正常。以及我们正在使用的。每当 250 限制有问题时,只是另一个空表和另一个计划任务。
    【解决方案2】:

    有完全相同的问题。

    有一张我们正在吸收历史记录的表格,在我们超过某个阈值之前它工作正常。 (不确定它是否值得一提,但该表也在当前数据到达时实时写入)。我们在没有达到 250 个活动分区限制的情况下将 ~500m 行放入表中,数据是有序的,等等。

    然后几周前发生了一些变化,从那时起,每当将历史行写入表时,它几乎立即从 0 跳到 250 个活动磁性分区,并且历史摄取停止。我们已经为此奋斗了数周。

    我们的解决方案是创建另一个空表, 将历史记录导入其中,然后每 50m 行左右使用计划查询将所有数据从这个“临时”表复制到我们要使用的实际表中。

    由于某种原因,这工作正常,所有行都被考虑在内并且它永远不会达到 250 个活动分区限制。它的成本要高一些,但在我们的案例中并不多,而且这是我们发现的唯一可行的方法。

    编辑:澄清 - 将实时或“当前”数据流式传输到 mem-store 总是可以正常工作。这仅在将历史数据写入磁存储时才会发生。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 2021-06-04
      相关资源
      最近更新 更多