【问题标题】:How to clear last run query (Cache) in snowflake如何清除雪花中的上次运行查询(缓存)
【发布时间】:2022-07-27 16:47:33
【问题描述】:

我想测试查询性能。示例:

从 vw_testrole 中选择 *。

vw_testrole- 有很多连接。由于数据被缓存,因此它在更短的时间内返回。我想查看查询计划以及如何查看它或清除缓存,或者我可以查看原始执行时间。

谢谢, 奚

【问题讨论】:

标签: snowflake-cloud-data-platform snowflake-schema


【解决方案1】:

一些额外信息,因为您计划进行一些“性能测试”以确定查询的预期执行时间。

USE_CACHED_RESULT 参数禁止使用缓存的查询结果。它不会删除现有的缓存。如果禁用它,您可以看到查询计划(如您所愿),并且每次都会执行您的查询,而不检查结果是否已经可用(因为之前运行了相同的查询)。但是你应该知道 Snowflake 有多个缓存。

  1. 仓库缓存:正如 Simeon 在评论中提到的,Snowflake 缓存最近访问了仓库节点本地磁盘中的远程数据(在共享存储上)。这不容易清洗。即使暂停一个仓库也可能不会删除它。

  2. 元数据缓存 - 如果您的查询访问非常大的表并且编译时间很长,因为访问元数据(用于计算统计数据等),那么这个缓存可能非常重要。当您重新运行查询时,它可能会从元数据缓存中读取,并显着减少编译时间。

  3. 结果缓存:这是您要禁用的缓存。

而且,运行以下命令不会禁用它:

ALTER SESSION UNSET USE_CACHED_RESULT=FALSE;
ALTER SESSION UNSET USE_CACHED_RESULT; 

第一个将给出您遇到的错误。最后一个不会出错,但默认值为 TRUE,所以实际上它启用了它。正确的命令是:

ALTER SESSION SET USE_CACHED_RESULT=FALSE;

【讨论】:

    【解决方案2】:

    你可以通过设置ALTER SESSION UNSET USE_CACHED_RESULT;来清除缓存

    要获取最后一个查询 Id 的计划,您可以使用下面的 stmt:

    select system$explain_plan_json(last_query_id()) as explain_plan;
    

    【讨论】:

    • 运行此命令时出现错误 ALTER SESSION UNSET USE_CACHED_RESULT=FALSE;
    • 对不起使用 ALTER SESSION UNSET USE_CACHED_RESULT;
    • 但请注意,虽然您不会得到40ms 的回复,但您将获得远程数据的本地缓存。因此,您可以进行几次虚拟运行,然后对完全本地数据进行所有性能比较,但这也有不利的一面,如果实际查询是在本地缓存未命中时运行的,则更改可能会在远程读取中丢失时间。只有当可读性受到影响以改善本地数据案例时,这才会真正产生影响。
    • @Anand 我相信你现在知道你可以编辑答案了!我已经为你做了。
    猜你喜欢
    • 2014-12-17
    • 1970-01-01
    • 2017-02-02
    • 2021-12-03
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    相关资源
    最近更新 更多