多集群仓库¶
多集群仓库使您能够扩展计算资源,以在用户和查询并发需求发生变化时(例如在高峰时段和非工作时段)管理用户和查询并发需求。
本主题内容:
什么是多集群仓库?¶
默认情况下,虚拟仓库由单个计算资源集群组成,该集群可供仓库执行查询。当查询提交到仓库时,仓库会为每个查询分配资源并开始执行查询。如果没有足够的资源来执行提交到仓库的所有查询,Snowflake 会将其他查询排入队列,直到有必要的资源可用为止。
借助多集群仓库,Snowflake 支持静态或动态分配更多集群,以提供更大的计算资源池。多集群仓库通过指定以下属性来进行定义:
最大集群数,大于 1(最多 10 个)。
最小集群数,等于或小于最大值(最多 10 个)。
此外,多集群仓库支持与单集群仓库相同的所有属性和操作,包括:
指定仓库大小。
随时调整仓库大小。
由于不活动而自动暂停正在运行的仓库;请注意,这不适用于单个集群,而适用于整个多集群仓库。
提交新查询后,系统会自动恢复暂停的仓库。
最大化与自动缩放¶
您可以选择以下任一模式运行多集群仓库:
- 最大化:
通过为最大和最小集群数指定 相同的 值来启用此模式(请注意,指定的值必须大于 1)。在此模式下,当仓库启动时,Snowflake 会启动所有集群,以便在仓库运行时提供最大可用资源。
对于静态控制可用计算资源,此模式非常有效,尤其是在有大量并发用户会话和/或查询且数量波动不大的情况下。
- 自动扩展:
通过为最大和最小集群数指定 不同的 值来启用此模式。在此模式下,Snowflake 根据需要启动和停止集群,以动态管理仓库负载:
随着仓库的并发用户会话和/或查询数量的增加,以及查询由于资源不足而开始排队,Snowflake 会自动启动更多集群,最多可达到为仓库定义的最大数量。
同样,当仓库负载减少时,Snowflake 会自动关闭集群,以减少运行集群的数量,并相应地减少仓库使用的 Credit。
为帮助控制自动扩展模式下的 Credit 使用,Snowflake 提供了一个属性 SCALING_POLICY,用于确定自动启动或关闭其他集群时使用的扩展策略。有关更多信息,请参阅 为多集群仓库设置扩展策略 (本主题内容)。
小技巧
要创建多集群仓库,请参阅 创建多集群仓库 (本主题内容)。
请注意以下事项:
对于多集群仓库, Maximum Clusters 字段(Web 界面)或 MAX_CLUSTER_COUNT 属性 (SQL) 中的最大集群数必须 大于 1。
对于单集群仓库,最大和最小集群数必须 都等于 1。
对于自动扩展模式,最大集群数必须 大于 最小集群数。
对于最大化模式,最大集群数必须 等于 最小集群数。
在确定多集群仓库使用的最大和最小集群数时,请从自动扩展模式开始,并从小集群数开始(例如,最大集群数 = 2 或 3,最小集群数 = 1)。在跟踪仓库负载随时间变化的过程中,可以增加集群的最大和最小数量,直到确定最能支持用户/查询并发性上限和下限的集群数量。
多集群大小和 Credit 使用量¶
每个集群中的计算资源量由仓库大小决定:
多集群仓库的集群总数由仓库大小乘以最大集群数计算得出。这也表示仓库每使用一个小时(即如果 所有 集群都在一小时内运行)所消耗的最大 Credit。
例如,具有 3 个集群的中型多集群仓库每小时消耗的最大 Credit 为 12 个。
如果调整了多集群仓库的大小,则新的大小将适用于该仓库的 所有 集群,包括当前正在运行的集群以及在调整多集群仓库大小后启动的任何集群。
每小时消耗的实际 Credit 取决于仓库每小时内运行的集群数量。有关更多详细信息,请参阅 多集群 Credit 使用量示例 (本主题内容)。
多集群仓库的优势¶
对于标准的单集群仓库,如果您的用户/查询负载增加到需要更多计算资源的程度:
您必须增加仓库的大小,或者启动更多仓库,并明确地将额外的用户/查询重定向到这些仓库。
然后,当不再需要这些资源时,为了节省 Credit,您必须手动缩小较大仓库或暂停使用其他仓库。
相比之下,多集群仓库能让更多用户连接到相同大小的仓库。此外:
在自动扩展模式下,多集群仓库无需调整仓库大小或启动和停止其他仓库即可处理波动的工作负载。Snowflake 会根据需要自动启动和停止其他集群。
在最大化模式下,您可以根据需要增加或减少集群数量,从而控制多集群仓库的容量。
小技巧
多集群仓库最适用于扩展资源,以提高用户/查询的并发性。对于提高运行缓慢的查询或数据加载的性能而言,多集群仓库的优势并不明显。对于这些类型的操作,调整 仓库大小可带来更多优势。
多集群 Credit 使用量示例¶
以下四个示例说明了多集群仓库的 Credit 使用量。有关按仓库大小计算的每小时计费的 Credit,请参阅 虚拟仓库 Credit 使用量。
备注
为简单起见,所有这些示例都以 1 小时、30 分钟和 15 分钟为增量来描述 Credit 使用量。在按秒计费的现实场景中,实际 Credit 使用量将根据每个集群的运行秒数来确定。
示例 1:最大化(2 小时)¶
在此示例中,具有 3 个集群的中型仓库在最大化模式下运行了 2 小时:
集群 1 |
集群 2 |
集群 3 |
总 Credit |
|
第 1 个小时 |
4 |
4 |
4 |
12 |
第 2 个小时 |
4 |
4 |
4 |
12 |
总 Credit |
8 |
8 |
8 |
24 |
示例 2:自动扩展(2 小时)¶
在此示例中,具有 3 个集群的中型仓库在自动扩展模式下运行了 2 小时:
集群 1 持续运行。
集群 2 仅在第 2 个小时持续运行。
集群 3 在第 2 个小时内运行 30 分钟。
集群 1 |
集群 2 |
集群 3 |
总 Credit |
|
第 1 个小时 |
4 |
0 |
0 |
4 |
第 2 个小时 |
4 |
4 |
2 |
10 |
总 Credit |
8 |
4 |
2 |
14 |
示例 3:自动扩展(3 小时)¶
在此示例中,具有 3 个集群的中型仓库在自动扩展模式下运行了 3 小时:
集群 1 持续运行。
集群 2 在整个第 2 个小时持续运行,第 3 个小时运行 30 分钟。
集群 3 在第 3 个小时内运行 30 分钟。
集群 1 |
集群 2 |
集群 3 |
总 Credit |
|
第 1 个小时 |
4 |
0 |
0 |
4 |
第 2 个小时 |
4 |
4 |
0 |
8 |
第 3 个小时 |
4 |
2 |
2 |
8 |
总 Credit |
12 |
6 |
2 |
20 |
示例 4:使用调整大小自动扩展(3 小时)¶
在本示例中,示例 3 中的同一个仓库在自动扩展模式下运行了 3 小时,大小从中型调整为了大型:
集群 1 持续运行。
集群 2 在第 2 和第 3 个小时持续运行。
仓库将在 1:30 时从中型调整为大型。
集群 3 在第 3 个小时内运行 15 分钟。
集群 1 |
集群 2 |
集群 3 |
总 Credit |
|
第 1 个小时 |
4 |
0 |
0 |
4 |
第 2 个小时 |
4+2 |
4+2 |
0 |
12 |
第 3 个小时 |
8 |
8 |
2 |
18 |
总 Credit |
18 |
14 |
2 |
34 |
创建多集群仓库¶
您可以通过 Web 界面或使用 SQL 创建多集群仓库:
- Web 界面:
在 Maximum Clusters 字段中,选择一个大于 1 的值。
在 Minimum Clusters 字段中,可以选择一个大于 1 的值。
根据需要输入仓库的其他信息,然后点击 Finish。
- SQL:
执行带有以下内容的 CREATE WAREHOUSE 命令:
MAX_CLUSTER_COUNT
设置为大于1
的值。(可选)
MIN_CLUSTER_COUNT
设置为大于1
的值。
要查看有关创建的多集群仓库的信息,请执行以下操作:
- Classic Console:
Clusters 列显示了每个仓库的最小和最大集群数,以及仓库启动后当前正在运行的集群数。
- SQL:
执行 SHOW WAREHOUSES 命令。
输出包括三列(
min_cluster_count
、max_cluster_count
、started_clusters_column
),显示的信息与 Web 界面中 Clusters 列提供的信息相同。
多集群仓库的所有其他任务(本主题中描述的其余任务除外)与单集群 仓库任务 相同。
为多集群仓库设置扩展策略¶
为帮助控制在自动扩展模式下运行的多集群仓库消耗的 Credit,Snowflake 提供了扩展策略,用于确定何时启动或关闭集群。
仅当多集群仓库在自动扩展模式下运行时,其扩展策略才适用。在最大化模式下,所有集群并行运行,因此无需启动或关闭单个集群。
Snowflake 支持以下扩展策略:
策略 |
描述 |
仓库启动... |
仓库关闭... |
---|---|---|---|
标准(默认) |
与保留 Credit 相比,更倾向于启动更多集群,从而防止/尽量减少排队。 |
当有查询排队 或 系统检测到查询数量超过当前运行集群的执行能力时,第一个集群会立即启动。 每个后续集群都会在前一个集群启动 20 秒后等待启动。例如,如果您的仓库配置了 10 个最大集群,那么启动所有 10 个集群可能需要 200 多秒。 |
在连续 2 到 3 次成功检查(每隔 1 分钟执行一次)后,可以确定负载最小的集群上的负载是否可以在重新分配到其他集群,而无需再次启动集群。 |
经济 |
节省 Credit 的方法是让运行中的集群保持满负载,而不是启动其他集群,因为启动其他集群可能会导致查询排队并需要更长时间才能完成。 |
只有当系统估计有足够的查询负载让集群忙碌至少 6 分钟时才会启动。 |
在连续 5 到 6 次成功检查(每隔 1 分钟执行一次)后,可以确定负载最小的集群上的负载是否可以在重新分配到其他集群,而无需再次启动集群。 |
备注
为了实现向后兼容,还提供了第三种扩展策略,即旧版策略。与其他策略相比,它采用的是基于仓库活动/非活动时间长度的静态方法。
旧版策略已被淘汰/移除。所有使用旧版策略的仓库现在都使用默认的标准策略。
多集群仓库的扩展策略可在创建时或创建后的任何时间通过 Web 界面或使用 SQL 进行设置:
- Classic Console:
点击:
在 Scaling Policy 字段中,从下拉列表中选择所需的值。
- SQL:
执行 CREATE WAREHOUSE 或 ALTER WAREHOUSE 命令,将
SCALING_POLICY
设置为所需值。
例如,在 SQL 中:
ALTER WAREHOUSE mywh SET SCALING_POLICY = 'ECONOMY';
增加或减少多集群仓库的集群¶
您可以随时增加或减少仓库的集群数量,甚至可以在仓库运行和执行语句时增加或减少集群数量。可以通过 Web 界面或使用 SQL 增加或减少仓库的集群:
- Classic Console:
- SQL:
执行 ALTER WAREHOUSE 命令。
更改正在运行的仓库的最大和最小集群数的效果取决于该仓库是在“最大化”还是“自动扩展”模式下运行:
最大化:
- ↑ 最大和最小数量:
指定数量的集群立即启动。
- ↓ 最大和最小数量:
指定数量的集群在执行完语句且自动暂停期结束后关闭。
自动扩展:
- ↑ 最大数量:
如果
new_max_clusters > running_clusters
,则在需要更多集群之前不做任何更改。- ↓ 最大数量:
如果满足
new_max_clusters < running_clusters
, excess clusters shut down when they finish executing statements and the scaling policy 条件。- ↑ 最小数量:
如果
new_min_clusters > running_clusters
,则立即启动更多集群以满足最小数量要求。- ↓ 最小数量:
如果满足
new_min_clusters < running_clusters
, excess clusters shut down when they finish executing statements and the scaling policy 条件。
监控多集群仓库¶
您可以通过 Web 界面监控多集群仓库的使用情况: