Xi1*_*i12 9 snowflake-cloud-data-platform
我想测试查询性能。
-- Example:
SELECT * FROM VW_TESTROLE;
Run Code Online (Sandbox Code Playgroud)
vw_testrole- 有很多连接。由于数据被缓存,因此返回的时间更短。我想查看查询计划以及如何查看它或清除缓存,或者我可以查看执行所需的原始时间。
谢谢,习
Gok*_*til 14
一些额外的信息,因为您计划进行一些“性能测试”来确定查询的预期执行时间。
USE_CACHED_RESULT 参数禁止使用缓存的查询结果。它不会删除现有的缓存。如果禁用它,您可以看到查询计划(如您想要的),并且每次都会执行您的查询,而不检查结果是否已经可用(因为以前运行过同一查询)。但你应该知道 Snowflake 有多个缓存。
仓库缓存:正如 Simeon 在评论中提到的,Snowflake 缓存最近访问了仓库节点本地磁盘中的远程数据(在共享存储上)。那不太容易清洁。即使暂停仓库也不一定能删除它。
元数据缓存 - 如果您的查询访问非常大的表并且由于访问元数据(用于计算统计信息等)而编译时间很长,那么此缓存可能非常重要。当您重新运行查询时,它可能会从元数据缓存中读取,并显着减少编译时间。
结果缓存:这是您要禁用的缓存。
并且,运行以下命令不会禁用它:
ALTER SESSION UNSET USE_CACHED_RESULT=FALSE;
ALTER SESSION UNSET USE_CACHED_RESULT;
Run Code Online (Sandbox Code Playgroud)
第一个将给出您遇到的错误。最后一个不会给出错误,但默认值为 TRUE,所以实际上它启用了它。正确的命令是:
ALTER SESSION SET USE_CACHED_RESULT=FALSE;
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以通过设置清除缓存
-- VIEW CURRENT PARAMETER SETTING
SHOW PARAMETERS LIKE '%CACHE%';
-- TURN OFF CACHING
ALTER SESSION UNSET USE_CACHED_RESULT;
-- TURN OFF CACHING ALTERNATIVE
ALTER SESSION SET USE_CACHED_RESULT = FALSE;
-- TURN BACK ON CACHING (THIS IS THE DEFAULT)
ALTER SESSION SET USE_CACHED_RESULT = TRUE;
Run Code Online (Sandbox Code Playgroud)
要获取最后一个查询 Id 的计划,您可以使用以下 stmt:
SELECT SYSTEM$EXPLAIN_PLAN_JSON(LAST_QUERY_ID()) AS EXPLAIN_PLAN;
-- or if you want it formatted:
SELECT PARSE_JSON(SYSTEM$EXPLAIN_PLAN_JSON(LAST_QUERY_ID())) AS EXPLAIN_PLAN;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16980 次 |
| 最近记录: |