【问题标题】:How to Speed up AWS Timestream query performance?如何加快 AWS Timestream 查询性能?
【发布时间】:2023-02-09 22:07:41
【问题描述】:

使用 grafana API 查询 AWS timestream 数据库,结果显示在仪表板上

虽然当我们查询较少的数据点时一切正常,但当我查询过多的数据时我的查询会失败,即 1-2 个月的 100 个或更多维度。查询在获取数据时会失败。

【问题讨论】:

    标签: amazon-web-services amazon-timestream


    【解决方案1】:

    正如 AWS Timestream 文档中所述,有一些 best practices,如果您遵循,您的查询将会非常快。我可以保证,遵守这些规则,您可以在 40 秒内返回一个巨大的数据集(4M 记录)。

    除了下面的这些指南之外,我还建议避免使用高基数维度。我解释说:如果你有一个维度,比如时间,或者无限增长的东西,这个维度上的索引就会失控,很快,你的查询就会变得太慢而无法使用。

    原始文档可以在here找到(列表中有一些未粘贴的链接,请查阅文档)。

    以下是针对亚马逊查询的建议最佳做法 时间流。

    仅包括查询所必需的度量和维度名称。 添加无关的列会增加数据扫描,这会影响 查询的性能。

    在可能的情况下,使用 SELECT 子句中的内置聚合和标量函数以及 WHERE 子句适用于提高查询性能并减少 成本。请参阅 SELECT 和聚合函数。

    尽可能使用近似函数。例如,使用 APPROX_DISTINCT 而不是 COUNT(DISTINCT column_name) 来优化查询性能 并降低查询成本。请参阅聚合函数。

    使用 CASE 表达式来执行复杂的聚合而不是 多次从同一张表中选择。请参阅 CASE 语句。

    如果可能,请在您的 WHERE 子句中包含一个时间范围 询问。这优化了查询性能和成本。例如,如果你 只需要数据集中最后一个小时的数据,然后包括一个 时间谓词,例如 time > ago(1h)。请参见 SELECT 和 Interval 以及 期间。

    当查询访问表中的度量子集时,始终包括 查询的 WHERE 子句中的度量名称。

    在可能的情况下,在比较维度时使用相等运算符 和查询的 WHERE 子句中的度量。一个相等的谓词 维度和度量名称允许提高查询性能和 降低查询成本。

    尽可能避免在 WHERE 子句中使用函数来 优化成本。

    避免多次使用 LIKE 子句。而是使用常规 筛选字符串上的多个值时的表达式 柱子。请参阅正则表达式函数。

    仅在查询的 GROUP BY 子句中使用必要的列。

    如果查询结果需要按照特定的顺序,显式 在最外层查询的 ORDER BY 子句中指定该顺序。如果 您的查询结果不需要排序,避免使用 ORDER BY 子句以提高查询性能。

    如果您只需要查询中的前 N ​​行,请使用 LIMIT 子句。

    如果您使用 ORDER BY 子句查看顶部或底部 N 值,使用 LIMIT 子句来降低查询成本。

    使用返回的响应中的分页标记来检索 查询结果。有关详细信息,请参阅查询。

    如果您已经开始运行查询并意识到查询不会 返回您要查找的结果,取消查询以节省成本。 有关详细信息,请参阅取消查询。

    如果您的应用程序遇到限制,请继续将数据发送到 Amazon Timestream 以相同的速率启用 Amazon Timestream 自动缩放以满足您的查询吞吐量需求 应用。

    如果您的应用程序的查询并发要求超过 Timestream 的默认限制,请联系 AWS Support 以提高限制。

    【讨论】:

      猜你喜欢
      • 2021-07-14
      • 1970-01-01
      • 2021-12-25
      • 2015-11-24
      • 1970-01-01
      • 2021-07-24
      • 2011-06-12
      • 2021-01-20
      • 2018-08-12
      相关资源
      最近更新 更多