【发布时间】:2021-12-03 17:18:36
【问题描述】:
我在几个地方读到雪花中有 3 级缓存:
-
元数据缓存。在全局服务层中维护。这包括与微分区相关的元数据,例如列中的最小值和最大值、列中不同值的数量。这使得
SELECT MIN(col) FROM table等查询无需虚拟仓库即可返回,因为元数据已缓存。 -
查询结果缓存。这也由全局服务层维护,并将查询的结果集保存 24 小时(如果在此期间运行相同的查询,则会延长 24 小时)。
-
仓库数据缓存。这由本地附加存储(通常是 SSD)中的查询处理层维护,并包含从存储层提取的微分区。
https://www.linkedin.com/pulse/caching-snowflake-one-minute-arangaperumal-govindsamy/
然后我还在 Snowflake 文档中读到这些缓存存在:
-
结果缓存:保存过去 24 小时内执行的每个查询的结果。这些可跨虚拟仓库使用,因此返回给一个用户的查询结果可供系统上执行相同查询的任何其他用户使用,前提是基础数据未更改。
-
本地磁盘缓存。这用于缓存 SQL 查询使用的数据。每当给定查询需要数据时,都会从远程磁盘存储中检索数据,并缓存在 SSD 和内存中。
-
远程磁盘缓存。这拥有长期存储。此级别负责数据弹性,对于 Amazon Web Services,这意味着 99.999999999% 的持久性。即使在整个数据中心发生故障的情况下。
https://community.snowflake.com/s/article/Caching-in-Snowflake-Data-Warehouse
这些之间的对应关系是什么?两者都有查询结果缓存,但为什么雪花文档中没有提到元数据缓存?并且是仓库数据缓存中包含的雪花文档中提到的远程磁盘缓存(我认为不应该。
那么 Snowflake 中真的有 4 种缓存吗?:
- 元数据缓存
- 查询结果缓存
- 本地磁盘缓存
- 远程磁盘缓存
【问题讨论】:
标签: snowflake-cloud-data-platform snowflake-schema