首页 > 解决方案 > 高信用使用 - information_schema.query_history

问题描述

是否有一种优化的方式来识别 Snowflake 中长时间运行的查询?我注意到的是information_schema.query_history,无论是否提供参数值进行查询都不会影响所产生的成本。

背景:我们有一个 AWS lambda,它会定期运行以通过利用来查找任何长时间运行的查询information_schema.query_history。但是,无论您向参数end_time_range_start等提供的值如何,每次执行都将花费 0.18 积分,以限制您返回的数据。

因此,这两个查询都会产生相同的成本。

table(
      information_schema.query_history
      (
        end_time_range_start=> dateadd('minutes',-5,current_timestamp()),
        result_limit=>100
      )
     )


table(information_schema.query_history(result_limit=>100))

注意:我们已经使用STATEMENT_TIMEOUT_IN_SECONDS在仓库级别设置查询持续时间的限制。此外,我们有资源监控器来限制使用的积分,但我们需要更精细的解决方案来提醒我们是否有人运行长时间运行的查询。

标签: snowflake-cloud-data-platform

解决方案


您可以直接查询 SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY 以更好地控制返回给您的查询。这包含 1 年的数据,但在此处显示的数据最多有 45 分钟的延迟。

https://docs.snowflake.net/manuals/sql-reference/account-usage/query_history.html

在成本方面,如果您正在利用最常用于执行查询的仓库,那么它确实不会花费您任何额外的信用。如果可以的话,我会考虑切换到那个仓库。


推荐阅读