多集群仓库

多集群仓库使您能够扩展计算资源,以在用户和查询并发需求发生变化时(例如在高峰时段和非工作时段)管理用户和查询并发需求。

什么是多集群仓库?

默认情况下,虚拟仓库由单个计算资源集群组成,该集群可供仓库执行查询。当查询提交到仓库时,仓库会为每个查询分配资源并开始执行查询。如果没有足够的资源来执行提交到仓库的所有查询,Snowflake 会将其他查询排入队列,直到有必要的资源可用为止。

借助多集群仓库,Snowflake 支持静态或动态分配更多集群,以提供更大的计算资源池。多集群仓库通过指定以下属性来进行定义:

  • 最大集群数,大于 1。您可以指定的最高值取决于仓库规模。有关每个仓库规模的集群数上限,请参阅 :ref:`label-max_cluster_size_limit_per_warehouse_size`(本主题内容)。

  • 最小集群数,等于或小于最大值。

此外,多集群仓库支持与单集群仓库相同的所有属性和操作,包括:

  • 指定仓库大小。

  • 随时调整仓库大小。

  • 由于不活动而自动暂停正在运行的仓库;请注意,这不适用于单个集群,而适用于整个多集群仓库。

  • 提交新查询后,系统会自动恢复暂停的仓库。

多集群仓库的集群数上限

多集群仓库的最大集群数取决于仓库规模。仓库规模越大,集群数的限制就越低。下表显示了每个仓库规模的最大集群数:

仓库规模

允许的最大集群数

默认最大集群数

XSMALL

300

10

SMALL

300

10

MEDIUM

300

10

LARGE

160

10

XLARGE

80

10

2XLARGE

40

10

3XLARGE

20

10

4XLARGE

10

10

5XLARGE

10

10

6XLARGE

10

10

备注

当前,Snowsight 支持将 MAX_CLUSTER_COUNT 更新为最多 10 个集群。要指定 MAX_CLUSTER_COUNT 大于 10,请使用 SQL 中的 CREATE WAREHOUSE 或 ALTER WAREHOUSE 命令。

最大化与自动缩放

您可以选择以下任一模式运行多集群仓库:

最大化:

通过为最大和最小集群数指定 相同的 值来启用此模式(请注意,指定的值必须大于 1)。在此模式下,当仓库启动时,Snowflake 会启动所有集群,以便在仓库运行时提供最大可用资源。

对于静态控制可用计算资源,此模式非常有效,尤其是在有大量并发用户会话和/或查询且数量波动不大的情况下。

自动扩展:

通过为最大和最小集群数指定 不同的 值来启用此模式。在此模式下,Snowflake 根据需要启动和停止集群,以动态管理仓库负载:

  • 随着仓库的并发用户会话和/或查询数量的增加,以及查询由于资源不足而开始排队,Snowflake 会自动启动更多集群,最多可达到为仓库定义的最大数量。

  • 同样,当仓库负载减少时,Snowflake 会自动关闭集群,以减少运行集群的数量,并相应地减少仓库使用的 Credit。

为帮助控制自动扩展模式下的 Credit 使用,Snowflake 提供了一个属性 SCALING_POLICY,用于确定自动启动或关闭其他集群时使用的扩展策略。有关更多信息,请参阅 :ref:`label-mcw_scaling_policies`(本主题内容)。

要创建多集群仓库,请参阅 :ref:`label-multi_cluster_create`(本主题内容)。

  • 对于自动扩展模式,最大集群数必须 大于 最小集群数。

  • 对于最大化模式,最大集群数必须 等于 最小集群数。

小技巧

在确定多集群仓库使用的最大和最小集群数时,请从自动扩展模式开始,并从小集群数开始(例如,最大集群数 = 2 或 3,最小集群数 = 1)。在跟踪仓库负载随时间变化的过程中,可以增加集群的最大和最小数量,直到确定最能支持用户/查询并发性上限和下限的集群数量。

多集群大小和 Credit 使用量

每个集群中的计算资源量由仓库大小决定:

  • 多集群仓库的集群总数由仓库大小乘以最大集群数计算得出。这也表示仓库每使用一个小时(即如果 所有 集群都在一小时内运行)所消耗的最大 Credit。

    例如,具有 3 个集群的中型多集群仓库每小时消耗的最大 Credit 为 12 个。

  • 如果调整了多集群仓库的大小,则新的大小将适用于该仓库的 所有 集群,包括当前正在运行的集群以及在调整多集群仓库大小后启动的任何集群。

每小时消耗的实际 Credit 取决于仓库每小时内运行的集群数量。有关更多详细信息,请参阅 :ref:`label-multi_cluster_credit_usage_examples`(本主题内容)。

多集群仓库的优势

对于标准的单集群仓库,如果您的用户/查询负载增加到需要更多计算资源的程度:

  1. 您必须增加仓库的大小,或者启动更多仓库,并明确地将额外的用户/查询重定向到这些仓库。

  2. 然后,当不再需要这些资源时,为了节省 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

创建多集群仓库

您可以在 Snowsight 中创建多集群仓库,也可以使用 SQL 创建多集群仓库:

Snowsight:

点击 Admin » Warehouses » + Warehouse

  1. 展开 Advanced Options

  2. 选中 Multi-cluster Warehouse 复选框。

  3. Max Clusters 字段中,选择一个大于 1 的值。

    备注

    目前,您可以在 Snowsight 中选择的最高值是 10。多集群仓库的集群数上限 中所示的最大值仅适用于 SQL 中的 CREATE WAREHOUSE 和 ALTER WAREHOUSE 命令。

  4. Min Clusters 字段中,可以选择一个大于 1 的值。

  5. 根据需要输入仓库的其他信息,然后点击 Create Warehouse

SQL:

执行带有以下内容的 CREATE WAREHOUSE 命令:

  • MAX_CLUSTER_COUNT 设置为大于 1 的值。有关根据仓库规模可以指定的最高值,请参阅 :ref:`label-max_cluster_size_limit_per_warehouse_size`(本主题内容)。

  • (可选) MIN_CLUSTER_COUNT 设置为大于 1 的值。

要查看有关创建的多集群仓库的信息,请执行以下操作:

Snowsight:

点击 Admin » Warehouses

Clusters 列显示了每个仓库的最小和最大集群数,以及仓库启动后当前正在运行的集群数。您可以按 Clusters 列降序排列,将多集群仓库列在顶部。

Classic Console:

点击 Warehouses Warehouses 选项卡

SQL:

执行 SHOW WAREHOUSES 命令。

输出包括三列(min_cluster_countmax_cluster_countstarted_clusters),显示的信息与 Web 界面中 Clusters 列提供的信息相同。

小技巧

如果 SHOW WAREHOUSES 输出因包含太多列而难以阅读,您可以接着执行另一个查询,该查询仅包含您所需的列,还可添加用于筛选和排序的其他子句。使用如下所示的查询,并根据需要进行调整。列名带引号,因为在 SHOW WAREHOUSES 输出中列名区分大小写。

-- Must do the SHOW first to produce the full result set.
SHOW WAREHOUSES;
-- result_scan() helps to customize a report using the result set from the previous query.
SELECT "name", "state", "size", "max_cluster_count", "started_clusters", "type"
  FROM TABLE(result_scan(-1))
  WHERE "state" IN ('STARTED','SUSPENDED')
  ORDER BY "type" DESC, "name";
Copy

多集群仓库的所有其他任务(本主题中描述的其余任务除外)与单集群 仓库任务 相同。

为多集群仓库设置扩展策略

为帮助控制在自动扩展模式下运行的多集群仓库消耗的 Credit,Snowflake 提供了扩展策略。Snowflake 使用扩展策略来确定如何通过在仓库运行时启动或关闭单个集群来调整多集群仓库的容量。您可以指定扩展策略,使 Snowflake 优先考虑该仓库中查询的响应能力和吞吐量,或最大限度地降低该仓库的成本。

仅当多集群仓库在自动扩展模式下运行时,其扩展策略才适用。在最大化模式下,所有集群并行运行,因此无需启动或关闭单个集群。

Snowflake 支持以下扩展策略:

策略

描述

新的集群启动...

空闲或负载较轻的集群关闭...

标准(默认)

与保留 Credit 相比,更倾向于启动更多集群,从而防止/尽量减少排队。

当查询排队时,或者如果 Snowflake 估计当前运行的集群没有足够的资源来处理任何额外的查询,Snowflake 会增加仓库中的集群数。

对于 MAX_CLUSTER_COUNT 小于或等于 10 的仓库,Snowflake 会启动一个额外的集群。

对于 MAX_CLUSTER_COUNT 大于 10 的仓库,Snowflake 会同时启动多个集群,以适应工作负载的快速增长。

在持续处于低负载状态一段时间后,Snowflake 会在这些负载最低的集群上运行的查询完成时,关闭其中的一个或多个集群。当集群数超过 10 时,Snowflake 可能会一次关闭多个集群。当集群数小于或等于 10 时,Snowflake 会一次关闭空闲集群。

经济

节省 Credit 的方法是让运行中的集群保持满负载,而不是启动其他集群,因为启动其他集群可能会导致查询排队并需要更长时间才能完成。

只有当系统估计有足够的查询负载让集群忙碌至少 6 分钟时才会启动。

在持续处于低负载状态一段时间后,Snowflake 会在这些负载最低的集群上运行的查询完成时,关闭其中的一个或多个集群。当集群数超过 10 时,Snowflake 可能会一次关闭多个集群。当集群数小于或等于 10 时,Snowflake 会一次关闭空闲集群。

备注

为了实现向后兼容,之前还提供了第三种扩展策略,即旧版策略。旧版策略已移除。所有使用旧版策略的仓库现在都使用默认的标准策略。

您可以在创建多集群仓库时或之后的任何时间设置其扩展策略,方式如下:通过 Snowsight 或使用 SQL:

Snowsight:

New Warehouse 对话框的 Advanced Options 下,如果您选择了 Multi-cluster Warehouse,则可以从 Scaling Policy 下拉列表中选择相应的扩展策略。

对于现有的多集群仓库,点击 Admin » Warehouses。然后在 More 菜单 (...) 下选择 Edit

Scaling Policy 字段中,从下拉列表中选择所需的值。

小技巧

只有在您所选的仓库为多集群仓库,并且最大集群值大于最小集群值的情况下,您才会看到 Scaling Policy 下拉列表。

Classic Console:

点击:

  • Warehouses Warehouses 选项卡 » Create

  • Warehouses Warehouses 选项卡 » <warehouse_name> » Configure

Scaling Policy 字段中,从下拉列表中选择所需的值。

SQL:

执行 CREATE WAREHOUSEALTER WAREHOUSE 命令,将 SCALING_POLICY 设置为所需值。

例如,在 SQL 中:

CREATE WAREHOUSE mywh WITH MAX_CLUSTER_COUNT = 2, SCALING_POLICY = 'STANDARD';
ALTER WAREHOUSE mywh SET SCALING_POLICY = 'ECONOMY';
Copy

增加或减少多集群仓库的集群

您可以随时增加或减少仓库的最大和最小集群数,甚至可以在仓库运行和执行语句时增加或减少仓库的最大和最小集群数。您可以通过 Snowsight 或使用 SQL 调整仓库的最大和最小集群数:

Snowsight:

点击 Admin » Warehouses

点击仓库名称可以查看其属性和历史活动。从 More 菜单 (...) 中选择 Edit。您还可以取消选择 Multi-cluster Warehouse 复选框,将最大和最小集群设置重置为 1,将仓库更改为单集群仓库。

Classic Console:

点击 Warehouses Warehouses 选项卡 » <warehouse_name> » Configure

SQL:

执行 ALTER WAREHOUSE 命令。

备注

当前,Snowsight 支持将 MAX_CLUSTER_COUNT 更新为最多 10 个集群。要将 MAX_CLUSTER_COUNT 增加到 10 以上,请在 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 界面监控多集群仓库的使用情况:

Snowsight:

点击 Admin » Warehouses,然后选择一个仓库名称。

这样,您就可以细致精准地监控一个仓库,例如查看当前正在运行或排队的查询。

或者,您可以点击 Monitoring » Query History。通过此页面,可以查看账户中多个仓库的活动。要仅查看一个仓库的活动,请在 Filters 下拉菜单下选择 Warehouse。然后从列表中选择一个仓库名称。

Classic Console:

点击 History History 选项卡

监控多集群仓库时,您可以看到仓库处理的所有查询。对于每个查询,您可以看到详细信息,例如花费了多长时间、扫描了多少字节以及返回了多少行。您还可以看到用于执行仓库处理的每个语句的集群。要选择要查看的详细信息,请在 Columns 下拉菜单下选择 Cluster NumberDurationRows 等项。

语言: 中文