优化仓库缓存¶
本主题讨论仓库所有者或管理员如何优化仓库缓存,以提高在仓库上运行的查询的性能。
正在运行的仓库会维护表数据的缓存,在同一仓库上运行的查询可以访问这些数据。如果后续查询能够从缓存中而不是从表中读取数据,就能提高后续查询的性能。
另请参阅 使用持久化查询结果,其中说明了如何缓存和重复使用特定查询的结果。
备注
您必须有 访问共享 SNOWFLAKE 数据库的权限,才能执行本主题中提供的诊断查询。默认情况下,只有 ACCOUNTADMIN 角色具有执行查询所需的权限。
查找从缓存中扫描的数据¶
下面的查询提供了从缓存中扫描的数据所占的百分比,该百分比在所有查询中进行了汇总,并按仓库进行了细分。
如果您的查询可以受益于从缓存中扫描数据(如频繁的类似查询),且从缓存中扫描的数据占比较低,那么您可以通过优化缓存来提高性能。
SELECT warehouse_name
,COUNT(*) AS query_count
,SUM(bytes_scanned) AS bytes_scanned
,SUM(bytes_scanned*percentage_scanned_from_cache) AS bytes_scanned_from_cache
,SUM(bytes_scanned*percentage_scanned_from_cache) / SUM(bytes_scanned) AS percent_scanned_from_cache
FROM snowflake.account_usage.query_history
WHERE start_time >= dateadd(month,-1,current_timestamp())
AND bytes_scanned > 0
GROUP BY 1
ORDER BY 5;
关于缓存和自动暂停¶
仓库的自动暂停设置可能会对查询性能产生直接影响,因为当仓库暂停时,缓存会被删除。如果仓库正在频繁运行类似的查询,那么在两次查询之间暂停仓库可能没有意义,因为在执行下一个查询之前,系统可能会删除缓存。
在设置自动暂停时间限制时,您可以使用以下一般准则:
对于 任务,Snowflake 建议立即暂停。
对于 DevOps、DataOps 和数据科学用例,Snowflake 建议将自动暂停设置为大约 5 分钟,因为缓存对于临时查询和唯一查询并不那么重要。
对于查询仓库,例如 BI 和 SELECT 用例,Snowflake 建议将自动暂停设置为至少 10 分钟,以便为用户维护缓存。
成本注意事项¶
请记住,即使不处理查询。正在运行的仓库也会消耗 Credit。请确保自动暂停设置与您的工作负载相匹配。例如,如果仓库每 30 分钟执行一次查询,那么将自动暂停设置设为 10 分钟是没有意义的。仓库将在闲置时消耗 Credit,而不会获得缓存的优势,因为它会在下一次查询执行前被删除。
如何配置自动暂停¶
要更改仓库暂停并删除其缓存之前必须经过的时间:
- Snowsight:
登录 Snowsight。
导航到 Admin » Warehouses。
找到仓库,然后选择 . . . » Edit。
确保 Auto Suspend 已开启。
在 Suspend After (min) 字段中,输入仓库暂停之前必须经过的分钟数。
选择 Save Warehouse。
- SQL:
使用 ALTER WAREHOUSE 命令更改自动暂停时间限制,该时间限制以秒为单位,而不是以分钟为单位指定。例如:
ALTER WAREHOUSE my_wh SET AUTO_SUSPEND = 600;