监控动态表性能

性能监控可帮助您完成以下任务:

  • 识别缓慢或昂贵的动态表刷新。

  • 诊断瓶颈。

  • 衡量优化的影响。

本主题说明在监控动态表性能时的注意事项以及如何诊断问题。有关监控工具的信息,请参阅 监控动态表

小技巧

有关实践示例,请参阅 教程:为 SCD Type 1 工作负载优化动态表性能

关键绩效指标

要监控动态表性能,请重点关注本部分中描述的指标。

刷新持续时间

刷新持续时间衡量每次刷新完成所需的时间。要发现性能下降情况,请跟踪一段时间内的刷新持续时间。

Warning signs:

  • 持续时间随着时间的推移而增加:数据量增长或 数据局部性 降级可能会导致刷新时间不断增加。

  • 持续时间接近目标滞后:当刷新时间几乎与 目标滞后 相同时,您可能无法满足数据新鲜度要求。

  • 持续时间方差高:刷新时间大幅波动可能意味着工作负载激增或资源争用。

要查看刷新持续时间,请参阅 监控动态表的刷新状态

滞后指标

滞后指标反映了动态表满足数据新鲜度目标的效果。有关目标滞后工作原理的信息,请参阅 了解动态表目标滞后

Key metrics:

  • 实际滞后:从源数据发生变化到动态表反映这些变化之间的时间间隔。

  • 目标滞后内时间比率:表保持在目标滞后内的时间所占百分比。比率低于 1,表示管道未达到其新鲜度目标。

  • 最大滞后:给定周期内的最长实际滞后。

要查看滞后指标,请参阅 监控动态表的刷新状态

分区统计信息

对于增量刷新,扫描的分区数应与更改的数据成正比,而不是与表的总大小成正比。高分区扫描率表明数据局部性较差。

Warning signs:

  • 增量刷新期间扫描总分区的很大比例。

  • 分区扫描率随着时间的推移而增加,而数据却没有相应增长。

要查看分区统计信息,请参阅 分析查询配置文件

有关改进数据局部性的指南,请参阅 提高数据局部性

刷新模式

刷新模式直接影响性能。验证动态表是否使用预期模式。

要检查刷新模式,请使用 SHOW DYNAMIC TABLES 并审查 refresh_moderefresh_mode_reason 列。在 Snowsight 中,在对象标头处查看刷新模式。

有关选择正确刷新模式的指南,请参阅 选择刷新模式

诊断刷新缓慢问题

当刷新时间超过预期时,请按照以下步骤确定原因:

  1. Check the refresh history for trends in refresh duration, such as gradual increases or sudden spikes (监控动态表的刷新状态).

  2. Review the query profile to identify bottlenecks (分析查询配置文件):

    • 高分区扫描率表明 数据局部性 较差。

    • Bytes spilled suggest that the warehouse is too small.

    • 特定的运算符花费很长时间,可能表明有机会 优化动态表查询

  3. Check whether lag consistently exceeds your target, which indicates that refreshes might not keep up with your data volume (监控动态表的刷新状态).

  4. Review upstream dependencies to check whether upstream tables cause delays or produce large volumes of changes.

    In the Graph view in Snowsight, look for the following conditions:

    • 执行刷新的上游表(显示为 executing 状态)。

    • 上游表出现故障或暂停。

    • 上游表的刷新时间比平时更长。

    要访问 Graph 视图,请参阅 查看连接到动态表的表图形

  5. Check the volume of changes that the dynamic table processes, because large volumes of changes from upstream dependencies can slow down refreshes.

    使用 DYNAMIC_TABLE_REFRESH_HISTORY 函数来查看最近刷新中有多少行发生了变化:

    SELECT
      name,
      data_timestamp,
      statistics:numInsertedRows::INT AS rows_inserted,
      statistics:numDeletedRows::INT AS rows_deleted,
      refresh_action
    FROM TABLE(INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY(
      NAME => 'my_dynamic_table'
    ))
    ORDER BY data_timestamp DESC
    LIMIT 10;
    
    Copy

    当变更数据量相对于表总规模来说较大(超过表行数的 5%)时,建议改用全量刷新模式。

分析查询配置文件

查询配置文件 显示每次刷新的详细执行统计信息。当刷新缓慢时,查询配置文件可帮助您确定优化机会。

要访问查询配置文件,请执行以下操作:

  1. 导航到 Transformation » Dynamic Tables

  2. 选择动态表并转到 Refresh History 选项卡。

  3. 选择要分析的刷新旁边的 Show query profile

What to look for

  • 扫描的分区与修剪的分区:当分区扫描率相对于分区总数较高时,其原因通常是 数据局部性 较差或缺乏聚类。

  • 时间分布:检查哪些运算符消耗的时间最多。耗时过长的运算符可能意味着存在查询优化的机会。请参阅 优化增量刷新查询 以获得特定于运算符的指南。

  • 溢出到本地或远程存储的字节:高字节溢出通常表明仓库规模不足以应对当前刷新工作负载,或同一仓库上运行的其他查询占用了刷新所需的内存资源。考虑 增加仓库规模 或在专用仓库上运行动态表刷新以减少争用。

有关如何解决查询配置文件中发现的问题的更多指南,请参阅 优化动态表性能

监控仓库使用情况

要检查仓库是否可以处理动态表工作负载并找到降低成本的方法,请监控仓库使用情况。

Key metrics to monitor

  • 溢出的字节:字节溢出到本地或远程存储意味着仓库规模可能太小。考虑 增加仓库规模。有关识别和排查字节溢出问题的详细信息,请参阅 寻找溢出到存储的查询

  • 仓库利用率:检查仓库是否有足够的资源用于刷新工作负载。利用率低意味着您的仓库规模可能过大。排队时间长意味着您的仓库规模过小或并发查询过多。

  • Query queuing: Queued queries delay refreshes. If refreshes frequently queue, increase warehouse size, use a dedicated warehouse for dynamic table refreshes, or consider a multi-cluster warehouse to handle variable workloads.

  • credit 使用量:跟踪 credit 以平衡性能与成本。定期监控以发现调整仓库规模或优化刷新调度的机会。

要查看仓库使用情况和排队时间,请参阅 减少队列。使用 优化动态表性能 优化动态表的仓库配置。

监控依赖关系

Dependencies between dynamic tables can affect performance. Performance issues in upstream tables cascade to downstream tables because a downstream table must wait for upstream tables to complete their refreshes before it can start its own refresh.

要诊断与上游依赖关系相关的性能问题,请参阅 诊断刷新缓慢问题

要查看依赖关系图,请参阅 查看连接到动态表的表图形

设置性能问题警报

您可以设置警报,以便在性能下降时通知您。我们建议为以下条件创建警报:

  • 刷新持续时间超过阈值。

  • 滞后始终未达到目标。

警报使用事件表来跟踪刷新事件。有关设置说明,请参阅 动态表的事件表监控和警报