了解动态表的仓库使用情况

动态表支持双仓库,以针对不同类型的刷新操作优化性能和成本。您可以为 :ref:`初始化和重新初始化 <label-dynamic_tables_initialization>`(通常资源消耗更大)指定一个专用仓库,同时使用另一个仓库处理所有其他刷新操作。

初始化和重新初始化执行完整数据扫描,可能比增量刷新需要更长的时间。这些操作通常发生在故障转移等事件期间,例如新提升的主动态表在首次刷新时必须执行完整的重新初始化。通过为这些操作分配更大或性能更强的仓库,您可以在不扩大用于常规增量刷新的仓库规模的情况下,缩短恢复时间并满足严格的 RTO/RPO 要求。

有关仓库使用成本的信息,请参阅 Understanding costs for dynamic tables

运行以下 SQL 命令来设置 INITIALIZATION_WAREHOUSE 属性,该属性将初始化和重新初始化操作定向到专用仓库。所有其他刷新都使用由 WAREHOUSE 属性指定的仓库。

  • CREATE DYNAMIC TABLE:您可以通过使用的 CREATE DYNAMIC TABLE 命令的 变体,来设置 INITIALIZATION_WAREHOUSE 属性。

    CREATE DYNAMIC TABLE my_dynamic_table
      TARGET_LAG = 'DOWNSTREAM'
      WAREHOUSE = 'XS_WAREHOUSE'
      INITIALIZATION_WAREHOUSE = '4XL_WAREHOUSE'
      AS <query>
    
    Copy
  • ALTER DYNAMIC TABLE:您可以使用此命令设置或取消设置 INITIALIZATION_WAREHOUSE 属性。当 INITIALIZATION_WAREHOUSE 属性是 SET 时,指定的仓库用于所有初始化和重新初始化;当属性为 UNSET 时,动态表对所有刷新操作均使用由 WAREHOUSE 指定的仓库。

    ALTER DYNAMIC TABLE my_dynamic_table SET INITIALIZATION_WAREHOUSE = '4XL_WAREHOUSE';
    
    Copy
    ALTER DYNAMIC TABLE my_dynamic_table UNSET INITIALIZATION_WAREHOUSE;
    
    Copy

如果未设置 INITIALIZATION_WAREHOUSE,则所有刷新操作(包括初始化和重新初始化)均在由 WAREHOUSE 指定的仓库上运行。

要查看正在使用的仓库,可以使用以下界面:

您必须使用一个已被授予动态表的 MONITOR 权限的角色。有关更多信息,请参阅 列出动态表或查看有关特定列的信息 和 。

仓库配置如何影响动态表性能

仓库大小并不总是与动态表刷新成本直接相关。要找到最佳规模,请在多个仓库规模上测试您的刷新查询并比较性能。

更大的仓库主要通过以下两种方式提升性能:

  • 内存:如果查询超出了仓库的内存,则会溢出到本地存储,从而增加工作量并减慢执行速度。更大的仓库可以避免溢出并显着加快刷新速度。

  • 并行:更大的仓库可以并行处理更多任务。如果查询具有足够的可并行化工作,增大仓库规模通常会以大致成比例的成本降低运行时间;例如,将仓库规模加倍通常会使运行时间减半。

    但是,在达到某个点后,额外的并行性带来的收益会递减。成本最优的规模通常足以避免内存溢出,但又不至于大到使并行度饱和。

对于增量动态表,初始刷新 通常需要比后续刷新更多的计算量。常见的工作流程是使用 INITIALIZATION_WAREHOUSE 在较大的实例上运行初始刷新。

有关仓库大小调整和相关成本的更多信息,请参阅 虚拟仓库 Credit 使用量

使用双仓库时的限制和注意事项

手动刷新动态表,您可以运行 ALTER DYNAMIC TABLE ... REFRESH COPY SESSION。此命令通过使用当前用户和仓库,在当前会话的副本中运行刷新操作。指定 COPY SESSION 时,会忽略 INITIALIZATION_WAREHOUSE,即使对于初始化和重新初始化也是如此。来自 COPY SESSION 的仓库优先于 WAREHOUSE 和 INITIALIZATION_WAREHOUSE。

语言: 中文