仓库注意事项

本主题提供在 Snowflake 中使用虚拟仓库处理查询的 一般 准则和最佳实践。其中 提供具体或绝对的数字、值或建议,因为每个查询场景都不同,并受众多因素的影响,包括并发用户/查询的数量、被查询表的数量、数据大小和组成,以及您对仓库可用性、延迟和成本的具体要求。

涵盖仓库数据加载的注意事项,这将在另一个主题中介绍(请参阅侧边栏)。

有效且高效使用仓库的关键是:

  1. 尝试使用不同类型的查询和不同大小的仓库,以确定最能满足您的特定查询需求和工作负载的组合。

  2. 不要只关注仓库大小。Snowflake 采用按秒计费方式,因此您可以运行更大的仓库(大、X-大、2X-大等),并在不使用时直接暂停它们。

备注

这些准则和最佳实践适用于单群集仓库(所有账户的标准仓库)和 多群集仓库 [及更高版本] 提供)。

本主题内容:

如何针对仓库收取 Credit?

credit 费用的计算依据是:

  • 仓库大小。

  • 群集数量(如果使用 多群集仓库)。

  • 每个群集中计算资源的运行时间。

例如:

X-小:

每个群集连续运行一小时,收取 1 个 credit;仓库大小每递增一次,每个仓库的计算资源数量通常会翻倍。

4X-大:

每个群集连续运行一小时,收取 128 个 credit。

请注意以下事项:

  • 为仓库配置计算资源时:

    • 配置计算资源的最低计费时间为 1 分钟(即 60 秒)。

    • 第一个 60 秒期间结束前停止仓库 没有 任何好处,因为该期间的 credit 已经计费。

    • 在第一个 60 秒之后,正在运行的仓库的所有后续计费均按秒计费(直到其所有计算资源关闭)。下面提供三个例子:

      • 如果仓库运行了 30 到 60 秒,则按 60 秒计费。

      • 如果仓库运行 61 秒,则只按 61 秒计费。

      • 如果仓库运行 61 秒后关闭,然后重新启动并运行不到 60 秒,则按 121 秒(60 + 1 + 60)计费。

  • 调整仓库大小可为仓库中的 每个 群集提供额外的计算资源:

    • 这将导致仓库(在额外计算资源运行时)计费 credit 相应增加。

    • 额外计算资源在配置时计费(即额外资源的 credit 是相对于仓库大小调整的时间计费的)。

    • 将 5XL 或 6XL 仓库调整为 4XL 或更小的仓库会导致在旧仓库处于静默状态时,短时间内向客户同时收取新仓库和旧仓库的费用。

    • Credit 使用量以小时为增量显示。在按秒计费时,您将看到以小数形式显示的 credit 使用/计费数量。

查询组成如何影响仓库处理?

处理查询所需的计算资源取决于查询的大小和复杂程度。在大多数情况下,查询的规模与仓库大小呈线性关系,尤其是对于更大、更复杂的查询而言。在考虑影响查询处理的因素时,请考虑以下几点:

  • 被查询表的总体大小比行数的影响更大。

  • 使用谓词进行查询过滤对处理有影响,查询中的连接/表数量也有影响。

小技巧

要获得最佳结果,应尽量在同一仓库中执行相对同质的查询(复杂程度、数据集等);在同一仓库中执行大小和/或复杂程度差异较大的查询会增加分析仓库负载的难度,从而增加选择最佳仓库大小以匹配工作负载中查询的复杂程度、组成和数量的难度。

仓库缓存对查询有何影响?

每个仓库在运行时,都会对仓库处理查询时访问的表数据进行缓存。如果后续查询能从缓存中读取数据,而不是从查询中的表中读取数据,就能提高查询性能。缓存的大小由仓库中的计算资源决定(也就是说,仓库越大,仓库中的计算资源越多,缓存也就越大)。

当仓库暂停时,该缓存会弃用,这可能会导致仓库恢复后某些查询的初始性能会降低。当恢复后的仓库运行并处理更多查询时,缓存就会重建,能够利用缓存的查询性能就会提高。

在决定是暂停仓库还是让其继续运行时,请记住这一点。换句话说,在通过暂停仓库来节省 credit 与保持以前查询的数据缓存以帮助提高性能之间,要考虑权衡利弊。

创建仓库

从成本和性能角度来看,创建仓库时需要考虑的两个最关键因素是:

  • 仓库规模(即可用计算资源)

  • 手动管理与自动管理(用于启动/恢复和暂停仓库)

如果使用 Snowflake Enterprise Edition,仓库中的群集数量也很重要。有关更多详细信息,请参阅 纵向扩展与横向扩展 (本主题内容)。

选择初始仓库大小

您为仓库选择的初始大小取决于仓库执行的任务及其处理的工作负载。例如:

  • 对于数据加载,仓库大小应与正在加载的文件数量和每个文件中的数据量相匹配。有关更多信息,请参阅 规划数据加载

  • 对于小规模测试环境中的查询,较小的仓库大小(X-小、小、中)可能就足够了。

  • 对于大规模生产环境中的查询,较大的仓库大小(大、X-大、2X-大等)可能更具成本效益。

但请注意,每秒 credit 计费和自动暂停功能可以让您灵活地从较大的大小开始,然后调整大小以匹配您的工作负载。您可以随时减小仓库的大小。

此外,对于更小、更基本的查询而言,更大的仓库并不一定更快。小型/简单查询通常不需要 X-大(或更大)仓库,因为无论并发处理多少查询,它们都不一定能从额外资源中获益。一般来说,应尽量使仓库的大小与仓库要处理的查询的预期大小和复杂程度相匹配。

小技巧

针对多种规模的仓库(例如 X-大、大、中)运行相同的查询进行试验。所试验查询应具有合适的大小和复杂程度,确保查询通常可在 5 到 10 分钟(或更短的时间内)完成。

为 Snowsight 选择一个仓库

某些 Snowsight 页面,例如 Task Run HistoryData Preview,需要一个仓库来运行 SQL 查询,以便显示的不仅仅是元数据。在这些页面上,仓库选择器指示这些 UI 查询正在运行的仓库。绿色点表示仓库处于活动状态。

建议使用 X-小数据仓库,通常对于大多数查询来说是足够的,但大型账户使用更大的数据仓库可能会看到性能提升。

在某些情况下,您的账户不会因客户端生成的语句而产生费用。例如,SHOW TABLES 不需要仓库来检索数据,因此不收取费用。有关一般仓库的更多信息,请参阅 仓库概述

备注

如果仓库暂时过载,并且 UI 查询在其他活动工作负载后排队,Snowsight 性能可能会受到影响。如果您注意到不一致的 Snowsight 性能,Snowflake 建议您检查所选仓库是否过载,并考虑使用一个利用率较低的仓库。大型账户拥有许多活跃用户,可能会受益于专用的 X-小仓库,用于 UI 相关的任务。

您可以查看当前选定仓库中哪些 Snowsight 查询正在运行以及它们何时运行。要监控这些查询,请按照以下步骤操作:

  1. 选择 Monitoring » Query History

  2. 选择 Filters 下拉列表。

  3. 选择 Client-generated statements 复选框以查看由客户端、驱动程序或库(包括 Web 界面)运行的内部查询。

  4. 选择 Apply Filters

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

使用默认仓库用于 Notebook 应用程序

每个账户中都配置了一个专用的 Snowflake 管理的仓库,以专门运行 Notebook 应用程序。SYSTEM$STREAMLIT_NOTEBOOK_WH 是一个多群集 X-小仓库,减少群集碎片化,优化您的整体成本,并有助于更好的装箱。有关更多详细信息,请参阅 用于 Notebook 的默认仓库

自动暂停仓库

可以将仓库设置为在指定时间内无活动时自动暂停。通过指定仓库不活动的时间段(分钟、小时等),可以启用自动暂停功能。

我们建议根据您的工作负载和仓库可用性要求设置自动暂停:

  • 如果您启用自动暂停,我们建议将其设置为较低值(例如 5 或 10 分钟或更短),因为 Snowflake 采用按秒计费方式。这将有助于防止您的仓库在不使用时运行(及消耗 credit)。

    但是,您设置的值应与查询工作负载中的间隙(如果有)匹配。例如,如果传入查询之间经常有 2 或 3 分钟的间隔,则将自动暂停设置为 1 或 2 分钟是没有意义的,因为您的仓库将持续处于暂停和恢复状态(如果还启用了自动恢复功能),并且每次恢复时,您都需要按最低 credit 使用量(即 60 秒)付费。

  • 如果出现以下情况,可能需要考虑禁用仓库的自动暂停功能:

    • 仓库的工作负载大且稳定。

    • 您要求仓库可用,且没有延迟或滞后时间。仓库配置通常非常快(例如 1 或 2秒);但是,根据仓库的大小和要配置的计算资源的可用性,可能需要更长的时间。

重要

如果您选择禁用自动暂停,请仔细考虑与持续运行仓库相关的成本(即使仓库不处理查询)。成本可能会很高,特别是对于较大的仓库(X-大、2X-大等)。

要禁用自动暂停功能,必须在 Web 界面中明确选择 Never,或在 SQL 中指定 0NULL

自动恢复仓库

仓库可以设置为在提交新查询时自动恢复。

我们建议根据您希望对特定仓库的使用施加多少控制来启用/禁用自动恢复:

  • 如果成本和访问权限不是问题,则启用自动恢复以确保仓库在需要时启动。请注意,仓库的恢复可能会因配置而出现短暂延迟。

  • 如果希望控制成本和/或用户访问权限,则禁用自动恢复功能,仅在需要时手动恢复仓库。

纵向扩展与横向扩展

Snowflake 支持两种扩展仓库的方式:

  • 通过调整仓库大小来纵向扩展。

  • 通过向多群集仓库添加群集来进行横向扩展(需要 Snowflake Enterprise Edition 或更高版本)。

调整仓库大小可提高性能

调整仓库大小通常可以提高查询性能,特别是对于较大、较复杂的查询。如果仓库没有足够的计算资源来处理并发提交的所有查询,调整仓库大小还有助于减少排队现象。请注意,调整仓库大小并不是为了处理并发问题;相反,应使用额外的仓库来处理工作负载,或使用多群集仓库(如果您的账户可以使用此功能)。

Snowflake 支持随时调整仓库大小,甚至在运行时也是如此。如果查询运行缓慢,并且您要在同一个仓库上运行具有相似大小和复杂程度的查询,可以选择在仓库运行时调整其大小;但请注意以下事项:

  • 如前所述,仓库大小越大,速度不一定越快;对于已经在快速执行的小型基本查询,调整大小后可能不会有明显改善。

  • 调整运行中仓库的大小不会影响仓库已在处理的查询;额外的计算资源在完全配置后,仅用于排队的查询和新查询。

  • 将 5XL 或 6XL 仓库调整为 4XL 或更小的仓库会导致在旧仓库处于静默状态时,短时间内向客户同时收取新仓库和旧仓库的费用。

小技巧

减小正在运行的仓库的大小会从仓库中删除计算资源。移除计算资源后,与这些资源关联的缓存也会被删除,这可能会影响性能,就像暂停仓库会在仓库恢复后会影响其性能一样。

在选择是减少正在运行的仓库的大小还是保持当前大小时,请记住这一点。换句话说,在节省 credit 和保持缓存之间需要权衡。

多集群仓库可提高并发性

多群集仓库 专为处理与大量并发用户和/或查询相关的排队和性能问题而设计。此外,如果您的用户/查询数量容易波动,多群集仓库可以帮助自动执行此过程。

在决定是否使用多群集仓库以及每个多群集仓库要使用的群集数量时,请考虑以下因素:

  • 如果您使用的是 Snowflake Enterprise Edition(或更高版本), 全部 仓库都应该配置为多群集仓库。

  • 除非您有在最大化模式下运行的特定要求,否则应将多群集仓库配置为在自动扩展模式下运行,这样 Snowflake 就能根据需要自动启动和停止群集。

  • 为多群集仓库选择最小和最大群集数时,请注意以下事项:

    最小值:

    保留默认值 1;这可确保仅根据需要启动其他群集。但是,如果担心仓库高可用性方面的问题,请将值设置为高于 1 的值。这有助于在万一某个群集发生故障时,确保多群集仓库的可用性和连续性。

    最大值:

    在考虑到仓库大小和相应 credit 成本的情况下,尽可能将此值设为最大。例如,一个 X-大多群集仓库的最大群集数 = 10,如果所有 10 个群集连续运行一小时,则一小时将消耗 160 个 credit。

语言: 中文