缓存 减少重复计算的需要

  • 物化视图:预先计算并存储复杂的查询结果以加快访问速度
  • 资源监控器和警报:设置监控器来跟踪和管理计算和存储使用情况,避免意外成本
  • 使用搜索优化和查询加速服务等功能:利用 Snowflake 特有的功能,旨在提高特定查询或数据场景的性能。
  • 随着工作负载、数据量和业务需求的发展,性能调整是一个活跃的过程。定期监控、测试和调整可确保您的 Snowflake 环境保持高效、经济高效,并能响应用户和应用程序的需求。

    让我们看一些实际例子。

    实际示例

    Snowflake 中的性能调整涉及优化存储和计算以提高效率并降低成本。以下是每种技术的概述以及代码示例(如果适用):

     1。最小化数据扫描

    减少查询扫描的数据量可以显着减少执行时间和成本。这可以通过在查询中使用过滤器来限制读取的行和列来实现。

    SQL

     

    --只选择你需要的列和行
    
    选择列 1、列 2
    
    来自你的表
    
    WHERE your_condition = 'specific_value';

    2.聚类

    Snowflake 不使用传统索引(如其他索引中的 B 树)数据库)。相反,它会自动创建并使用微分区和有关这些分区的元数据来优化查询性能。您可以通过对数据进行聚类来间接影响此过程。

    SQL

     

    --创建集群键
    
    ALTER TABLE your_table CLUSTER BY (your_column);

    3.优化连接

    首选连接具有相同数据类型的列,如果不需要精确匹配,请考虑使用近似连接。此外,在连接之前构建 SQL 来过滤数据可以减少所需的计算。

    SQL

     

    -- 在连接前进行过滤的高效连接
    
    选择 *
    
    从表1
    
    INNER JOIN (SELECT * FROM table2 WHERE your_condition = 'value') ASfiltered_table2
    
    ON table1.id = Filtered_table2.id;

    4。利用物化视图

    物化视图存储查询结果,可以显着加快使用相同条件频繁运行的查询的速度。

    SQL

     

    创建物化视图 your_view AS
    
    选择列
    
    来自你的表
    
    WHERE your_condition = '值'
    
    按列分组;

    5。分区

    Snowflake 自动将数据分区为微分区。虽然不需要显式分区,但您可以通过集群影响分区。

    6。仓库规模

    调整虚拟仓库的大小可以提高较大查询或工作负载的性能。

    SQL

     

    -- 调整仓库大小
    
    ALTER WAREHOUSE your_warehouse SET WAREHOUSE_SIZE = 'X-LARGE';

    7。查询缓存

    Snowflake 将查询结果缓存 24 小时,可用于加快重复查询的速度。

    8。绑定变量

    绑定变量可以通过减少解析时间来提高查询性能,特别是对于使用不同参数的重复查询。

    SQL

     

    -- 在会话中使用绑定变量
    
    SET my_variable = '值';
    
    选择 *
    
    来自你的表
    
    WHERE your_column = $my_variable;

    9。监控

    监控您的查询和仓库,以识别和优化低效运营。

    SQL

     

    --查看查询历史记录
    
    选择 *
    
    FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY());

    10。启用自动暂停

    当仓库不使用时自动暂停以节省成本。

    SQL

     

    更改仓库 yo​​ur_warehouse SET AUTO_SUSPEND = 300; -- 300 秒不活动后自动挂起

    11。启用自动恢复

    当查询请求其资源时,自动恢复暂停的仓库。

    SQL

     

    更改仓库 yo​​ur_warehouse SET AUTO_RESUME = TRUE;

    12。删除未使用的表

    删除不再需要的表以节省存储成本。

    SQL

     

    删除表 if_exists_your_table;

    13。清除休眠用户

    识别并删除不再活跃的用户。

    SQL

     

    -- 需要手动审核和操作
    
    显示用户;

    14。应用资源监视器

    设置资源监视器来跟踪和控制计算成本。

    SQL

     

    使用 CREDIT_QUOTA = 100 个触发器创建资源监视器 your_monitor,90% 请勿通知;

    15。监控接近云服务计费阈值的仓库

    密切关注仓库使用情况以避免意外费用。

    SQL

     

    -- 使用 ACCOUNT_USAGE 模式监控仓库成本
    
    选择 *
    
    FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY;

    16。为工作负载适当设置超时

    指定查询超时,以防止长时间运行的查询消耗过多资源。

    SQL

     

    更改会话设置语句_TIMEOUT_IN_SECONDS = 1200; -- 设置查询超时时间为20分钟

    16。搜索优化服务

    Snowflake 中的搜索优化服务旨在提高对单列或多列进行筛选的查询的性能,这对于具有数十亿行或更多行的大型表尤其有利。该服务优化了使用过滤器从表中检索结果所需的时间,而无需对查询进行任何更改。这对于列上具有相等和范围条件的查询很有用。

    启用后,Snowflake 会利用额外的结构来加快对过滤数据的访问速度,使其成为需要频繁访问大型数据集的特定行的场景的绝佳选择。但是,它会产生额外的成本,因此建议对性能提升证明费用合理的表启用它。

    示例

    考虑一个包含数十亿行的大型表 sales_data。您经常运行查询来检索特定日期的销售额。

    • 没有搜索优化
    SQL

     

    复制代码
    
    选择 *
    
    来自销售数据
    
    WHERE sale_date = '2023-01-01';

    执行此查询可能需要花费大量时间,因为 Snowflake 必须扫描表的很大一部分才能找到与条件匹配的行。

    • 启用搜索优化

    首先,在 sales_data 表上启用该服务:

    SQL

     

    复制代码
    
    更改表 sales_data 启用搜索优化;

    然后,运行与上述相同的查询可以缩短执行时间,因为 Snowflake 可以更有效地定位相关行。

    17。查询加速服务

    Snowflake 中的查询加速服务允许用户加速由于数据性质或查询复杂性而可能表现不佳的特定查询。该服务动态地将查询定向到优化的计算集群,无需手动优化或调整即可增强性能。

    这对于涉及需要大量计算资源的大型数据集的临时复杂分析查询非常有用。该服务自动识别提高查询性能的机会并应用加速,无需用户干预。

    示例

    考虑一个连接多个大型表并执行复杂聚合和窗口函数的分析查询。

    SQL

     

    复制代码
    
    选择
    
    a.customer_id,
    
    SUM(b.transaction_amount) OVER (PARTITION BY a.customer_id) AS Total_spent,
    
    AVG(b.transaction_amount) OVER (PARTITION BY a.customer_id) AS avg_spent
    
    从
    
    客户a
    
    加入
    
    交易 b ON a.customer_id = b.customer_id
    
    在哪里
    
    b.transaction_date 介于“2023-01-01”和“2023-01-31”之间
    
    通过...分组
    
    a.customer_id;

    如果涉及的表很大且计算很复杂,则该查询最初可能运行缓慢。通过利用查询加速服务,Snowflake 可以自动应用优化来缩短此类查询的执行时间,而无需对查询本身进行任何修改。

    查询加速服务通常需要在帐户或用户级别启用,具体取决于 Snowflake 版本和您组织的设置。使用此服务时可能会产生额外费用,因此根据特定用例的成本评估性能优势至关重要。

    18。多集群虚拟仓库

    在 Snowflake 中设置多集群虚拟仓库允许您水平扩展计算资源,以有效管理不同的并发需求。此功能使多个计算资源集群能够同时运行,在需要时提供额外的处理能力,并确保多个用户或作业可以运行而不会出现明显的延迟或性能下降。以下是如何在 Snowflake 中实际设置和配置多集群仓库:

    示例1:创建多集群仓库

    创建多集群仓库时,您可以指定它可以横向扩展的最小和最大集群数量以及扩展策略。

    SQL

     

    复制代码
    
    创建仓库 my_multi_cluster_warehouse
    
    WITH WAREHOUSE_SIZE = 'X-SMALL' -- 指定每个簇的大小。
    
    AUTO_SUSPEND = 300         -- 5 分钟不活动后自动挂起。
    
    AUTO_RESUME = TRUE         -- 提交查询时自动恢复。
    
    MIN_CLUSTER_COUNT = 1      -- 最小簇数。
    
    MAX_CLUSTER_COUNT = 4      -- 最大集群数,允许根据需求扩展至 4 个集群。
    
    SCALING_POLICY = '标准'; --“STANDARD”(默认)平衡可用集群之间的查询,“ECONOMY”最大限度地减少使用的集群数量。

    此命令设置一个名为 my_multi_cluster_warehouse 的多集群仓库。它从单个集群开始,可以根据工作负载自动扩展到四个集群。每个集群都使用“X-SMALL”大小,并实现自动挂起功能以提高成本效率。

    示例2:将现有仓库改为多集群

    如果您已经有一个单集群仓库,并希望将其修改为多集群仓库以处理更高的并发量,则可以更改其配置。

    SQL

     

    复制代码
    
    更改仓库 my_warehouse
    
    SET MIN_CLUSTER_COUNT = 2, -- 调整最小簇数。
    
    MAX_CLUSTER_COUNT = 6, -- 调整最大集群数以允许更多扩展。
    
    SCALING_POLICY = '经济'; -- 选择“经济”扩展策略以节省资源。

    这会将 my_warehouse 更改为在 2 到 6 个集群之间运行,适应工作负载需求,同时旨在通过在“ECONOMY”下选择更少、更完整的集群而不是更多、更空的集群来节省资源< /code> 扩展策略。

    • 管理工作负载: 实际上,使用多集群仓库可以显着改善您处理不同类型工作负载的方式:
    • 对于高并发:如果许多用户同时执行查询,仓库可以扩展到更多集群来满足增加的需求,确保所有用户无需长时间等待即可获得所需的资源。
    • 针对不同的工作负载:在活动较少期间,仓库可以扩展到更少的集群,甚至完全暂停,从而帮助有效管理成本,同时仍准备好随着需求的增加进行扩展。

    有效使用多集群仓库需要随着工作负载模式的发展进行监控并可能调整配置。 Snowflake 自动扩展和管理计算资源的能力使其成为管理具有不同并发要求的多样化动态工作负载的强大工具。

    结论

    在 Snowflake 中实施性能调整策略需要仔细考虑实现最佳性能、有效管理成本以及确保数据平台保持多功能性并适应不断变化的业务需求之间的权衡。这种平衡行为至关重要,因为过度激进的优化可能会导致复杂性增加或成本更高,而优化不足可能会导致性能不佳和用户不满意。

    调整仓库大小等设置或启用自动暂停和自动恢复等功能时,必须了解您的特定工作负载模式和要求。例如,为虚拟仓库选择合适的大小需要预测典型工作负载所需的计算能力,同时避免可能导致不必要费用的过度配置。同样,使用数据集群和物化视图应与常见的查询模式保持一致,以确保查询性能的好处超过额外的存储成本或维护开销。

    Comments are closed.