教程:使用 Query Acceleration Service 提高工作负载性能¶
简介¶
Snowflake 提供多种性能增强功能来加速其各种工作负载。在本教程中,您将学习如何利用 Query Acceleration Service (QAS) 提高您的整体工作负载性能。
先决条件¶
Enterprise Edition(或更高版本)的 Snowflake 账户
授予了以下权限的角色:
执行 CREATE WAREHOUSE 和 ALTER WAREHOUSE 命令所需的权限。
查询教程中的 Account Usage 视图所需的权限:
执行教程中的 Information Schema 表函数所需的权限:
SQL 的中间知识。
用于执行 SQL 命令的 Snowsight 或者 SnowSQL(CLI 客户端)。
您将学习的内容¶
在本教程中,您将学习如何:
在查询历史记录中查找符合加速条件的查询。
在两个独立的仓库中执行查询,以确定查询加速的效果。
比较有加速和没有加速情况下的查询性能和成本。
确定您的哪些仓库将从 Query Acceleration Service 中受益最多。
为现有仓库启用该服务。
查找符合条件的查询¶
查找符合条件的查询以执行加速。您可以使用以下示例查询来查找符合加速条件的查询。
此查询会识别符合条件的时间比率较高的查询,该比率由 ACCOUNT_USAGE 架构中 QUERY_ACCELERATION_ELIGIBLE 视图中 eligible_query_acceleration_time 字段与查询中的总查询持续时间的比率确定。
SELECT query_id,
query_text,
start_time,
end_time,
warehouse_name,
warehouse_size,
eligible_query_acceleration_time,
upper_limit_scale_factor,
DATEDIFF(second, start_time, end_time) AS total_duration,
eligible_query_acceleration_time / NULLIF(DATEDIFF(second, start_time, end_time), 0) AS eligible_time_ratio
FROM
SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
WHERE
start_time >= DATEADD(day, -30, CURRENT_TIMESTAMP())
AND eligible_time_ratio <= 1.0
AND total_duration BETWEEN 3 * 60 and 5 * 60
ORDER BY (eligible_time_ratio, upper_limit_scale_factor) DESC NULLS LAST
LIMIT 100;
从结果中选择 UPPER_LIMIT_SCALE_FACTOR 值最高的查询。
复制查询文本、仓库规模和上限比例因子。
如果上面的查询没有产生任何结果,您仍然可以使用以下示例查询来遵循本教程。此查询的示例数据集是与您共享的 Snowflake 示例数据中的 TPC-DS 数据 :
SELECT d.d_year as "Year",
i.i_brand_id as "Brand ID",
i.i_brand as "Brand",
SUM(ss_net_profit) as "Profit"
FROM snowflake_sample_data.tpcds_sf10tcl.date_dim d,
snowflake_sample_data.tpcds_sf10tcl.store_sales s,
snowflake_sample_data.tpcds_sf10tcl.item i
WHERE d.d_date_sk = s.ss_sold_date_sk
AND s.ss_item_sk = i.i_item_sk
AND i.i_manufact_id = 939
AND d.d_moy = 12
GROUP BY d.d_year,
i.i_brand,
i.i_brand_id
ORDER BY 1, 4, 2
LIMIT 200;
如果您使用此示例查询,则 WAREHOUSE_SIZE 为“X-Small”且 UPPER_LIMIT_SCALE_FACTOR 为 64。
复制查询文本、仓库规模和上限比例因子。
创建两个新仓库¶
本教程需要使用两个仓库来执行查询:一个启用 Query Acceleration Service,另一个不启用。在新的单独仓库中执行相同的查询将允许您比较本教程中 Query Acceleration Service 的性能和成本。
要创建仓库,请连接到 Snowflake,在 Snowsight 中或使用 SnowSQL 运行以下命令。使用上一步中选择的值替换 warehouse_size
和 upper_limit_scale_factor
:
CREATE WAREHOUSE noqas_wh WITH
WAREHOUSE_SIZE='<warehouse_size>'
ENABLE_QUERY_ACCELERATION = false
INITIALLY_SUSPENDED = true
AUTO_SUSPEND = 60;
CREATE WAREHOUSE qas_wh WITH
WAREHOUSE_SIZE='<warehouse_size>'
ENABLE_QUERY_ACCELERATION = true
QUERY_ACCELERATION_MAX_SCALE_FACTOR = <upper_limit_scale_factor>
INITIALLY_SUSPENDED = true
AUTO_SUSPEND = 60;
无 QAS 的查询¶
设置环境并找到符合查询加速条件的查询后,在未启用 Query Acceleration Service 的情况下执行该查询以查看其执行情况。
如果您使用提供的示例查询而不是查询历史记录中符合条件的查询,请首先执行以下语句:
USE SCHEMA snowflake_sample_data.tpcds_sf10tcl;
选择一个仓库并执行查询:
使用尚未启用 QAS 的仓库。
USE WAREHOUSE noqas_wh;
执行测试查询(上一步中的查询文本)。
获取最后执行的查询 ID。
如果您正在使用 Snowsight,您可以从 Results 面板中的 Query Profile 面板复制并粘贴查询 ID。或者,您可以执行以下语句:
SELECT LAST_QUERY_ID();
复制此查询 ID 以用于未来的其他步骤。
使用 QAS 执行查询¶
在没有查询加速的仓库中执行查询后,在启用了 QAS 的仓库中执行相同查询。
使用启用了 QAS 的仓库执行您的查询:
USE WAREHOUSE qas_wh;
执行测试查询(上一步中的查询文本)。
获取最后执行的查询 ID
如果您正在使用 Snowsight,您可以从 Results 面板中的 Query Profile 面板复制并粘贴查询 ID。或者,您可以执行以下语句:
SELECT LAST_QUERY_ID();
复制此查询 ID 以用于未来的其他步骤。
比较查询性能和成本¶
在前面的步骤中,您执行了相同的查询两次,一次使用启用了 QAS 的仓库,另一次则使用没有启用该功能的仓库。现在,您可以比较查询的查询性能了。
为此,您可以执行Information Schema QUERY_HISTORY 表函数来比较使用其查询 IDs 的查询执行时间:
SELECT query_id,
query_text,
warehouse_name,
total_elapsed_time
FROM TABLE(snowflake.information_schema.query_history())
WHERE query_id IN ('<non_accelerated_query_id>', '<accelerated_query_id>')
ORDER BY start_time;
比较使用和不使用加速执行的相同查询的 TOTAL_ELAPSED_TIME 。
接下来,可以为每个仓库执行 Information Schema WAREHOUSE_METERING_HISTORY 表函数来比较每个仓库的成本:
备注
如果您在本教程中跳过创建新仓库,改为使用预先存在的仓库,则此表函数的结果不一定有用。
执行以下查询以查看
noqas_wh
仓库的成本:SELECT start_time, end_time, warehouse_name, credits_used, credits_used_compute, credits_used_cloud_services, (credits_used + credits_used_compute + credits_used_cloud_services) AS credits_used_total FROM TABLE(SNOWFLAKE.INFORMATION_SCHEMA.WAREHOUSE_METERING_HISTORY( DATE_RANGE_START => DATEADD('days', -1, CURRENT_DATE()), WAREHOUSE_NAME => 'NOQAS_WH' ));
对于启用了 QAS 的仓库,将仓库和 Query Acceleration Service 的成本相加,计算 QAS 的总成本。
查看
qas_wh
仓库的成本:SELECT start_time, end_time, warehouse_name, credits_used, credits_used_compute, credits_used_cloud_services, (credits_used + credits_used_compute + credits_used_cloud_services) AS credits_used_total FROM TABLE(SNOWFLAKE.INFORMATION_SCHEMA.WAREHOUSE_METERING_HISTORY( DATE_RANGE_START => DATEADD('days', -1, CURRENT_DATE()), WAREHOUSE_NAME => 'QAS_WH' ));
使用 Information Schema QUERY_ACCELERATION_HISTORY 表函数查看 Query Acceleration Service 的成本:
SELECT start_time, end_time, warehouse_name, credits_used, num_files_scanned, num_bytes_scanned FROM TABLE(SNOWFLAKE.INFORMATION_SCHEMA.QUERY_ACCELERATION_HISTORY( DATE_RANGE_START => DATEADD('days', -1, CURRENT_DATE()), WAREHOUSE_NAME => 'QAS_WH' ));
将第一个查询中的
credits_used_total
值与第二个查询中的credits_used
值相加,计算出 QAS 的总成本。
到目前为止,您已经在两个仓库中测试了查询,其中一个仓库启用了 QAS,另一个则没有启用,并且能够比较 QAS 的性能和成本。接下来,您将学习如何确定哪些仓库将从 QAS 受益最多。
在您的工作负载中查找符合条件的仓库¶
您可以通过确定具有最多符合加速条件的查询的仓库和/或查询可加速时间最多的仓库,来找到从查询加速中受益最多的仓库。
确定上个月符合 Query Acceleration Service 条件的查询最多的仓库:
SELECT warehouse_name, count(query_id) as num_eligible_queries, MAX(upper_limit_scale_factor) FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE WHERE start_time > DATEADD(month, -1, CURRENT_TIMESTAMP()) GROUP BY warehouse_name ORDER BY num_eligible_queries DESC;
确定上个月符合 Query Acceleration Service 条件的时间最长的仓库:
SELECT warehouse_name, SUM(eligible_query_acceleration_time) AS total_eligible_time, MAX(upper_limit_scale_factor) FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE WHERE start_time > DATEADD(month, -1, CURRENT_TIMESTAMP()) GROUP BY warehouse_name ORDER BY total_eligible_time DESC;
通常,受益最多的仓库具有最多数量的符合条件的查询、最长的符合条件的查询加速时间,或两者兼而有之。例如,如果仓库位于上述两个查询结果的顶部,则该仓库可能是查询加速的良好候选者。
启用 Query Acceleration¶
在确定哪个仓库将从 Query Acceleration Service 中受益最大后,您可以通过执行以下 ALTER WAREHOUSE 语句来启用查询加速:
ALTER WAREHOUSE <warehouse_name> SET
enable_query_acceleration = TRUE;
现在您已经为仓库启用了 QAS,您已准备好利用查询加速来执行符合条件的查询。
清理和其他资源¶
要进行清理,请删除为本教程创建的仓库:
DROP WAREHOUSE noqas_wh;
DROP WAREHOUSE qas_wh;
后续阅读内容¶
有关 Query Acceleration Service 的更多信息,请参阅 使用 Query Acceleration Service。
有关识别符合条件的查询和仓库的其他示例查询,请参阅 确定可能受益于 Query Acceleration 的查询和仓库。
有关 QAS 比例因子的更多信息,请参阅:
有关比例因子的说明,请参阅 CREATE WAREHOUSE 主题中的 QUERY_ACCELERATION_MAX_SCALE_FACTOR。
有关设置比例因子的更多信息,请参阅 调整比例因子。
监控开始使用 Query Acceleration Service 后的 QAS 的使用情况和成本:
有关监控 Query Acceleration Service 使用情况的更多信息,请参阅 监控 Query Acceleration Service 使用情况。
有关服务成本的更多信息,请参阅 Query Acceleration Service 成本。
有关帮助评估 QAS 性能和成本的示例查询,请参阅 评估成本和性能。