Adaptive Compute

Adaptive Compute 是一项计算服务,专注于通过轻松的操作提供强大的性能。它将固定的计算引擎替换为可自动适应查询的工作负载感知型计算引擎。由系统决定如何分配资源以获得最佳性能,无需进行基础设施调整。

通过自动扩展资源和智能路由查询,Adaptive Compute 消除了传统仓库管理带来的操作复杂性:手动调整集群大小、中断性升级和手动性能调优。它还采用了新的硬件和性能增强功能,因此 Adaptive Warehouse 花费与 Gen2 相似的成本即可运行更多的查询。

您可以通过 Adaptive Warehouse 访问 Adaptive Compute。使用 Adaptive Warehouse,您不再需要管理以下内容:

  • 仓库大小(XSMALL、SMALL、MEDIUM 等)。

  • 多集群仓库设置。

  • Query Acceleration Service 设置

  • 暂停和恢复语义。

Snowflake 会自动处理所有这些内容,因此您的团队可以专注于处理数据,而无需管理数据背后的基础设施。

账户中所有 Adaptive Warehouse 的所有作业都会路由到计算资源的共享池。此池专用于您的账户:不与组织中的其他账户共享,也不供其他仓库类型使用,例如 Standard、Interactive 或 Snowpark-optimized。每个账户仍然可以拥有多个 Adaptive Warehouse,用于对具有相似性能和成本特征、报告和治理的工作负载进行分组。

Adaptive Warehouse 使用基于查询的计费模型,其中每次查询的成本取决于查询使用的计算量和软件资源等因素。您仍然可以在仓库级别推算成本,因为在 Adaptive Warehouse 中运行的所有查询加起来就是该仓库的总成本。查询级成本可见性在公共预览版期间不可用,但计划正式发布。

可以使用相同的成本管理工具:

您可以创建新的 Adaptive Warehouse 或在无需停机的情况下将现有 Standard Warehouse 转换为 Adaptive Warehouse。通过转换现有仓库,您可以保留现有的 Chargeback 和 Showback 结构以及工作负载分离(分析与 ETL、基于团队的仓库等)。例如,财务团队可能使用一个 Adaptive Warehouse,而工程团队可能使用另一个。

限制

Adaptive Warehouse 需要 Enterprise Edition(或更高版本)。

在公开预览版期间,Adaptive Warehouse 在以下 AWS 区域可用:US 西部 2(俄勒冈)、EU 西部 1(爱尔兰)和 AP 东北部 1(东京)。

以下转换也暂时 受支持:

  • 与 X5Large 或 X6Large 仓库之间的转换。

  • 与 Snowpark-Optimized Warehouses 或 Interactive Warehouse 之间的转换。

管理性能和吞吐量

Adaptive Warehouse 公开两个主要属性来控制性能和吞吐量:

  • MAX_QUERY_PERFORMANCE_LEVEL

  • QUERY_THROUGHPUT_MULTIPLIER

MAX_QUERY_PERFORMANCE_LEVEL

MAX_QUERY_PERFORMANCE_LEVEL 表示任何单个查询的性能上限。它在仓库级别设置,并承担告诉系统“加快”或“减慢”查询执行的机制。

该属性以 T 恤尺码单位表示(XSMALL 到 X4LARGE)。每种 T 恤尺寸所传达的性能水平与其相称的经典仓库尺寸相当或更好。

类型:

{ XSMALL | SMALL | MEDIUM | LARGE | XLARGE | XXLARGE | XXXLARGE | X4LARGE }

默认值:

XLARGE

语义:

  • 较大的值可为每个语句提供更多的计算空间,改善大型复杂查询的延迟,并增加单个语句的潜在瞬时支出。

  • 较小的值会限制每条语句的支出,但可能会减慢大型查询的速度,同时为并发性留出更多动态余量。

  • 此值不会映射到特定的底层计算配置。它仅表示性能级别:Snowflake 确定每个查询所需的实际资源。

行为:

Adaptive Compute 根据查询计划确定查询所需的最佳计算。如果服务确定最佳性能的计算需求大于 MAX_QUERY_PERFORMANCE_LEVEL,Snowflake 会将其限制在 MAX_QUERY_PERFORMANCE_LEVEL。对于较小的查询,Snowflake 会选择与查询需求相称的性能水平(低于 MAX_QUERY_PERFORMANCE_LEVEL)。

指南:

将 MAX_QUERY_PERFORMANCE_LEVEL 设置为您希望最大查询达到的最高查询性能。使用 Budgets资源监视器 管理一段时间内的总支出。

QUERY_THROUGHPUT_MULTIPLIER

QUERY_THROUGHPUT_MULTIPLIER 表示用于计算任何给定时间的最大吞吐量的乘数。您指定的不是绝对最大吞吐量,而是指定系统计算的最小值的整数比例因子。

要在 MAX_QUERY_PERFORMANCE_LEVEL 上并行运行 N 语句,请将乘数设置为 N。由于 MAX_QUERY_PERFORMANCE_LEVEL 表示上限,此设置通常支持 N 个以上的查询并行运行,因为许多查询所需的资源少于最大值。

类型:

非负整数

默认值:

2

将此值设置为 0 表示无限吞吐量:仓库可以使用所有可用的突发容量,不受限制。

语义:

当设置为正值时,最大吞吐量计算如下:

MAX_THROUGHPUT = QUERY_THROUGHPUT_MULTIPLIER * MINIMUM

其中 MINIMUM 是针对仓库上设置的 MAX_QUERY_PERFORMANCE_LEVEL 由系统计算得出的基本容量。

  • 充当此系统计算的基本容量的比例因子。

  • 较高的值会增加峰值吞吐量(更多并发工作)并减少排队,但代价可能是更高的瞬时支出。

  • 较低的值会限制突发吞吐量,并降低支出突然激增的风险,但可能会导致排队。

行为:

Snowflake 根据 MAX_QUERY_PERFORMANCE_LEVEL、迁移历史记录(经典大小、最大集群计数、QAS 比例因子)以及其他系统微调参数,计算仓库的内部基本容量费率。

将 QUERY_THROUGHPUT_MULTIPLIER 与此基本容量相乘,以确定可并发执行的查询总数。当系统低于此目标时,允许执行查询。当它到达目标时,它会把查询排入队列。

指南:

如果您观察到持久的加载排队时间并希望提高吞吐量,请增加 QUERY_THROUGHPUT_MULTIPLIER。如果您更关心限制瞬时支出,请减少 QUERY_THROUGHPUT_MULTIPLIER 并依靠 Budgets 和资源监视器进行绝对成本控制。

创建 Adaptive Warehouse

您可以使用 Snowsight、SQL 或 Cortex Code 创建 Adaptive Warehouse。

使用 Snowsight 创建 Adaptive Warehouse:

  1. 登录 Snowsight

  2. 在导航菜单中,选择 Compute » Warehouses

  3. 选择 +Warehouse

  4. Type 下拉列表中,选择 Adaptive

  5. (可选)选择 Advanced 并配置:

    • :ui:`Maximum query performance level`(默认值:XLarge)

    • :ui:`Query throughput multiplier`(默认值:2)

仓库已创建,可以正常使用。

将 Standard Warehouse 转换为 Adaptive Warehouse

您可以使用以下命令将 Snowsight、SQL 或 Cortex Code 将 Standard Warehouse 转换为 Adaptive Warehouse。

备注

将仓库转换为 Adaptive Warehouse 或从 Adaptive Warehouse 转换回 Standard Warehouse 是 在线操作,这意味着不会涉及任何停机时间。此转换不会使仓库不可用,也不会中断任何正在运行的查询。

将仓库转换为 Adaptive Warehouse 或转换回 Standard Warehouse 时,在该仓库上运行的现有查询将继续使用现有计算资源运行直至完成。同时,仓库会对新仓库类型的计算资源运行所有新查询。在现有查询运行期间,您需要为这两组计算资源付费。如果您要将仓库转换回 Standard Warehouse,则在此期间,无论是否有任何查询使用新的计算资源,仓库都不会自动暂停。现有查询完成后,工作负载将完全转移到新的计算资源。

要使用 Snowsight 将 Standard Warehouse 转换为 Adaptive Warehouse:

  1. 登录 Snowsight

  2. 在导航菜单中,选择 Compute » Warehouses » <warehouse_identifier>

  3. 选择更多菜单 ...`(三个点)|raa|:ui:`Convert to Adaptive

  4. 确认操作。

转换期间的属性行为

将 Standard Warehouse 转换为 Adaptive Warehouse 时,唯一必须更改的属性是 WAREHOUSE_TYPE。Snowflake 会自动为 MAX_QUERY_PERFORMANCE_LEVEL 和 QUERY_THROUGHPUT_MULTIPLIER 计算适当的值。

系统从 Standard Warehouse 的现有配置中派生出这些配置:

  • 仓库规模。

  • MAX_CLUSTER_COUNT(适用于多集群仓库)。

  • QAS 比例因子。

  • 仓库生成(硬件/软件生成)。

目标是与原始 Standard Warehouse 相比,保持或提高性能,为典型的负载峰值提供足够的突发容量,并避免在切换到 Adaptive Warehouse 时需要手动调整。

转换后,您可以选择使用 ALTER WAREHOUSE 替换 MAX_QUERY_PERFORMANCE_LEVEL 和 QUERY_THROUGHPUT_MULTIPLIER。WAREHOUSE_SIZE 和 MAX_CLUSTER_COUNT 等 Standard Warehouse 属性转换为 Adaptive 后不再适用,而 Adaptive 属性在转换回 Standard 后不再适用。

计费和定价

Adaptive Warehouse 使用基于查询的计费模式。每个查询的成本取决于其使用的计算量和软件资源等因素,包括集群大小和 Query Acceleration Service 等功能使用的额外容量 (QAS)。您无需为创建 Adaptive Warehouse 付费:在第一次查询运行时开始收费。

在 Adaptive Warehouse 中运行的所有查询加起来就是该仓库的总成本,因此您可以继续使用现有的 Chargeback 和 Showback 结构。Adaptive Warehouse 使用情况在使用语句中作为 COMPUTE 的一部分,使用虚拟仓库 Credit 进行报告。

您主要通过以下方式控制性能和支出:

  • MAX_QUERY_PERFORMANCE_LEVEL:限制每条语句的性能级别。

  • QUERY_THROUGHPUT_MULTIPLIER:限制任意时刻的整体突发容量。

  • Budgets 和资源监视器:在账户或仓库级别管理一段时间内的总支出。

典型配置模式:

工作负载类型

配置

对延迟敏感的关键工作负载

更高的 MAX_QUERY_PERFORMANCE_LEVEL(XLARGE 或以上)。更高的 QUERY_THROUGHPUT_MULTIPLIER。资源监视器或 Budgets,使总支出保持在计划范围内。

成本敏感型高吞吐量工作负载

中等 MAX_QUERY_PERFORMANCE_LEVEL(MEDIUM 或 LARGE)。中等 QUERY_THROUGHPUT_MULTIPLIER 平衡吞吐量与支出峰值。

预算紧张的工作负载

更低的 MAX_QUERY_PERFORMANCE_LEVEL。更低的 QUERY_THROUGHPUT_MULTIPLIER。严格的 Budgets 和资源监视器。

您可以使用 ACCOUNT_USAGE 视图来检索特定 Adaptive Warehouse 的 Credit 使用量的精细数据。使用 WAREHOUSE_METERING_HISTORY 视图 查看仓库的 Credit 使用量。有关相关视图的完整列表,请参阅 Account Usage 视图

有关计算成本的信息,请参阅 了解计算成本

SQL 参考

CREATE ADAPTIVE WAREHOUSE

创建新的自适应虚拟仓库。

CREATE [ OR REPLACE ] ADAPTIVE WAREHOUSE [ IF NOT EXISTS ] <name>
  [ [ WITH ] adaptiveProperties ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , ... ] ) ]
  [ objectParams ]

adaptiveProperties ::=
  COMMENT = '<string_literal>'
  MAX_QUERY_PERFORMANCE_LEVEL = { XSMALL | SMALL | MEDIUM | LARGE
                                | XLARGE | XXLARGE | XXXLARGE | X4LARGE }
  QUERY_THROUGHPUT_MULTIPLIER = <integer>

objectParams ::=
  STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <num>
  STATEMENT_TIMEOUT_IN_SECONDS = <num>

您还可以使用标准 CREATE WAREHOUSE 语法和 WAREHOUSE_TYPE = 'ADAPTIVE' 来创建 Adaptive Warehouse:

CREATE [ OR REPLACE ] WAREHOUSE [ IF NOT EXISTS ] <name>
  [ [ WITH ] WAREHOUSE_TYPE = 'ADAPTIVE'
    [ adaptiveProperties ]
  ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , ... ] ) ]
  [ objectParams ]

备注

Standard Warehouse 属性,例如 WAREHOUSE_SIZE、MIN_CLUSTER_COUNT、MAX_CLUSTER_COUNT 和 SCALING_POLICY 无法在 Adaptive Warehouse 上设置。同样,Adaptive Warehouse 属性,例如 MAX_QUERY_PERFORMANCE_LEVEL 和 QUERY_THROUGHPUT_MULTIPLIER 不能在 Standard Warehouse 上设置。

必填参数

name

自适应虚拟仓库的标识符。对于您的账户必须是唯一的。必须以字母字符开头,并且不能包含空格或特殊字符,除非使用双引号括起来。有关详细信息,请参阅 对象标识符

可选属性

MAX_QUERY_PERFORMANCE_LEVEL = { XSMALL | SMALL | MEDIUM | LARGE | XLARGE | XXLARGE | XXXLARGE | X4LARGE }

单个语句的性能级别上限以 T 恤尺码表示。默认:XLARGE

Snowflake 会根据语句特征选择不超过此限制的性能级别。较小的语句可能会以较低的性能级别运行,以减少支出。选择适合最大查询的值。

有关更多详细信息,请参阅 管理性能和吞吐量

QUERY_THROUGHPUT_MULTIPLIER = <integer>

乘数用于计算任何给定时间的最大吞吐量,表示为系统计算的最小值除以非负整数比例因子。较高的值会增加峰值吞吐量(更多并发工作)并减少排队,但代价可能是更高的瞬时支出。较低的值会限制突发吞吐量,并降低支出突然激增的风险,但可能会导致排队。0 值意味着无限的吞吐量。

默认:2

有关更多详细信息,请参阅 管理性能和吞吐量

STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <num>

最长时间以秒为单位,在 Snowflake 取消语句之前,SQL 语句可以在仓库中保持排队状态。有关详细信息,请参阅 参数

STATEMENT_TIMEOUT_IN_SECONDS = <num>

最长时间以秒为单位,正在运行的 SQL 语句可以在 Snowflake 取消之前运行。有关详细信息,请参阅 参数

示例

创建具有默认值的 Adaptive Warehouse:

CREATE ADAPTIVE WAREHOUSE my_adaptive_wh;

使用特定性能级别创建:

CREATE ADAPTIVE WAREHOUSE my_adaptive_wh
  WITH MAX_QUERY_PERFORMANCE_LEVEL = XXLARGE;

使用这两个属性创建:

CREATE ADAPTIVE WAREHOUSE my_adaptive_wh
  WITH MAX_QUERY_PERFORMANCE_LEVEL = MEDIUM
       QUERY_THROUGHPUT_MULTIPLIER = 6;

使用标准 CREATE WAREHOUSE 语法创建:

CREATE WAREHOUSE my_adaptive_wh
  WITH WAREHOUSE_TYPE = 'ADAPTIVE'
       MAX_QUERY_PERFORMANCE_LEVEL = LARGE
       QUERY_THROUGHPUT_MULTIPLIER = 3;

ALTER WAREHOUSE(自适应)

您可以使用 ALTER WAREHOUSE 将 Standard Warehouse 转换为 Adaptive Warehouse、修改 Adaptive Warehouse 属性,或将 Adaptive Warehouse 转换回 Standard Warehouse。

将 Standard Warehouse 转换为 Adaptive Warehouse:

ALTER WAREHOUSE my_warehouse SET WAREHOUSE_TYPE = 'ADAPTIVE';

在创建或转换后修改 Adaptive Warehouse 属性:

ALTER WAREHOUSE my_adaptive_wh SET
  MAX_QUERY_PERFORMANCE_LEVEL = XLARGE
  QUERY_THROUGHPUT_MULTIPLIER = 8;

将 Adaptive Warehouse 转换回 Standard Warehouse:

ALTER WAREHOUSE my_warehouse SET WAREHOUSE_TYPE = 'STANDARD';

SHOW WAREHOUSES

Adaptive Warehouse 功能为 SHOW WAREHOUSES 命令引入了新列。不适用于 Adaptive Warehouse 的属性显示为 NULL

特定于 Adaptive Warehouse 的列包括:

列名称

描述

STATE

其中之一:

  • ENABLED(活跃/运行中)

  • DISABLED(不活跃)

MAX_QUERY_PERFORMANCE_LEVEL

以 T 恤尺码表示。每条语句性能级别的上限。

QUERY_THROUGHPUT_MULTIPLIER

整数比例因子,控制仓库在任何时刻可以使用的突发容量大小。

DISABLED_REASONS

禁用 Adaptive Warehouse 的一个或多个原因。

Account Usage 视图

以下 ACCOUNT_USAGE 视图可用于 Adaptive Warehouse:

备注

对于 Adaptive Warehouse,QAS 使用情况包含在计算 Credit 中,不会显示为单独的 Credit 列。使用 WAREHOUSE_LOAD_HISTORY 视图 监控排队行为并了解是否需要调整 MAX_QUERY_PERFORMANCE_LEVEL 或 QUERY_THROUGHPUT_MULTIPLIER。

以下示例查询为在指定回溯期内运行至少一个处于 ADAPTIVE 状态的查询的任何仓库,生成仓库级别性能数据的时间序列。

WITH adaptive_whs AS (
  SELECT DISTINCT warehouse_name
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY q
  WHERE q.warehouse_size = 'ADAPTIVE'
    AND q.start_time >= DATEADD(day, -7, CURRENT_DATE())
)
SELECT
  q.end_time::DATE AS ds,
  q.warehouse_name,
  IFF(q.warehouse_size = 'ADAPTIVE', 'ADAPTIVE', 'STANDARD') AS warehouse_type,
  AVG(q.total_elapsed_time) AS avg_query_time,
  AVG(q.execution_time) AS avg_exec_time,
  AVG(q.queued_overload_time) AS avg_queued_overload_time,
  AVG(q.queued_provisioning_time) AS avg_queued_provisioning_time
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY q
WHERE q.start_time >= DATEADD(day, -7, CURRENT_DATE())
  AND q.warehouse_name IN (SELECT warehouse_name FROM adaptive_whs)
GROUP BY ALL;

将 Standard Warehouse 批量迁移到 Adaptive Warehouse

如果您想同时将许多 Standard Warehouse 迁移到 Adaptive Warehouse,可以使用 SYSTEM$BULK_UPDATE_WH 函数。

SYSTEM$BULK_UPDATE_WH 函数的参数

参数

描述

允许的值

property_name

要更新的仓库属性。

'WAREHOUSE_TYPE'

new_value

属性的新值。

'ADAPTIVE''STANDARD'

property_filter

JSON 筛选仓库属性(例如,名称模式、大小)。考虑更新与所有筛选器匹配的仓库。

'{"name": "TEST.*"}'

tag_filter

JSON 筛选标签。仓库必须匹配要选择的所有指定标签。

'{"cost-centre": "sales"}'

execution_mode

操作模式:执行更新或试运行。

'ACTIVE''DRY_RUN'

建议使用量:

  1. 首先,进行试运行并查看结果:

    SELECT SYSTEM$BULK_UPDATE_WH(
      'WAREHOUSE_TYPE',
      'ADAPTIVE',
      '{"WAREHOUSE_TYPE": "STANDARD"}',
      'DRY_RUN'
    );
    
  2. 查看输出并根据需要调整筛选器。

  3. 验证试运行后,使用活动模式再次调用该函数:

    SELECT SYSTEM$BULK_UPDATE_WH(
      'WAREHOUSE_TYPE',
      'ADAPTIVE',
      '{"WAREHOUSE_TYPE": "STANDARD"}',
      'ACTIVE'
    );
    
  4. 在重复或扩大迁移范围之前,请仔细查看结果和任何错误。