如何清除雪花中的最后一个 运行 查询(缓存)

How to clear last run query (Cache) in snowflake

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

select * 来自 vw_testrole.

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

谢谢, 习

您可以通过设置ALTER SESSION UNSET USE_CACHED_RESULT =FALSE;

清除缓存

要获取上次查询 Id 的计划,您可以使用以下 stmt:

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

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

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

  1. 仓库缓存:正如 Simeon 在评论中提到的,Snowflake 缓存最近访问了仓库节点本地磁盘中的远程数据(在共享存储上)。那不容易清理。连一个仓库挂了也未必会删除

  2. 元数据缓存 - 如果您的查询访问非常大的表并且由于访问元数据(用于计算统计信息等)而编译时间很长,那么此缓存可能非常重要。当您 re-run 查询时,它可能会从元数据缓存中读取,并显着减少编译时间。

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

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

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

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

ALTER SESSION SET USE_CACHED_RESULT=FALSE;