监视具体化视图

使用 “版本 ”下拉列表切换服务。 了解有关导航的详细信息
适用于:✅ Azure 数据资源管理器

通过以下方式监视具体化视图的运行状况:

注意

物化绝不会跳过任何数据,即使持续发生故障也是如此。 该视图始终基于源表中的所有记录返回该查询的最新快照。 常量失败会显著降低查询性能,但不会在视图查询中导致不正确的结果。

排查异常的物化视图

如果 MaterializedViewAgeSeconds 指标持续增加,并且 MaterializedViewHealth 指标显示视图处于不健康状态,请根据以下症状确定根本原因。

物化并发度不足

使用 .show capacity 来比较可同时运行的物化视图数量与当前正在运行的数量:

.show capacity
| where Resource == "MaterializedView"
| project Resource, Total, Consumed
资源 总计 已耗用
MaterializedView 1 0

Total 是当前并发限制,Consumed 是当前正在运行的具体化视图数量。 如果该限制导致物化延迟,则仅应在评估其对其他工作负载的影响后,才提高物化并发度。 有关详细信息,请参阅 “增加可用资源”。

物化失败

使用 .show materialized-view failures 检查故障。

  • 如果发生永久性错误,系统会自动禁用物化视图。 使用.show materialized-view检查IsEnabled是否为false,并使用.show journal查找已禁用的事件。 使表与具体化视图不兼容的源表架构更改是永久错误的一个示例。 有关详细信息,请参阅 .create materialized-view
  • 对于暂时性错误,系统会自动重试操作。 反复发生的内存限制或查询超时故障会延迟物化,并增加物化视图的陈旧程度。 有关减少暂时性故障的方法,请参阅 优化具体化视图

物化超出内存限制

使用 .show commands-and-queries 检查 MemoryPeak。 将 DatabaseNameViewName 替换为你的值:

.show commands-and-queries
| where Database == "DatabaseName" and ClientActivityId startswith "DN.MaterializedViews;ViewName;"
| project StartedOn, LastUpdatedOn, Duration, State, FailureReason,
          TotalCpu, MemoryPeak

达到内存限制的故障可能表现为失控的查询。 提高具体化内存限制或减少每个周期所需的内存。 更多信息请参阅 提高物化内存限制

物化命中了冷缓存

使用来自 .show commands-and-queries 的缓存统计信息来确定物化是否正在从冷缓存中检索数据。 以下查询汇总了过去一天的 ViewName缓存活动:

.show commands-and-queries
| where ClientActivityId startswith "DN.MaterializedViews;ViewName"
| where StartedOn > ago(1d)
| extend HotCacheHits = tolong(CacheStatistics.Shards.Hot.HitBytes),
         HotCacheMisses = tolong(CacheStatistics.Shards.Hot.MissBytes),
         HotCacheRetrieved = tolong(CacheStatistics.Shards.Hot.RetrieveBytes),
         ColdCacheHits = tolong(CacheStatistics.Shards.Cold.HitBytes),
         ColdCacheMisses = tolong(CacheStatistics.Shards.Cold.MissBytes),
         ColdCacheRetrieved = tolong(CacheStatistics.Shards.Cold.RetrieveBytes)
| summarize HotCacheHits = format_bytes(sum(HotCacheHits)),
            HotCacheMisses = format_bytes(sum(HotCacheMisses)),
            HotCacheRetrieved = format_bytes(sum(HotCacheRetrieved)),
            ColdCacheHits = format_bytes(sum(ColdCacheHits)),
            ColdCacheMisses = format_bytes(sum(ColdCacheMisses)),
            ColdCacheRetrieved = format_bytes(sum(ColdCacheRetrieved))
HotCacheHits HotCacheMisses 已检索到热缓存 ColdCacheHits ColdCacheMisses 冷缓存已检索
26 GB 0 字节 0 字节 1GB 0 字节 866 MB

冷缓存命中次数或检索到的字节数表明,物化正在从热缓存之外读取数据,这可能会显著减慢该过程。 将缓存策略扩展为覆盖物化扫描的数据。 有关详细信息,请参阅 调整缓存策略

物化扫描旧记录

使用ScannedExtentsStatistics检查.show queries。 大量已扫描的区段以及较旧的 MinDataScannedTime 表明,该周期正在扫描物化部分的全部或大部分内容,以查找与增量部分的交集。 使用适当的日期时间分组键、回溯周期或缓存策略来减少扫描。 有关详细信息,请参阅 “优化具体化视图”。

引入容量不足

检查 MaterializedViewResult摄取利用率指标是否具有InsufficientCapacity值。

反复出现的 InsufficientCapacity 值表明,可用的引入容量正在限制具体化。 增加可用于具体化的资源。 有关详细信息,请参阅 “增加可用资源”。

具体化视图仍然不正常

如果上述诊断未确定特定原因,则服务可能没有足够的容量或资源来及时具体化所有数据。 仅在应用较少的中断性优化后,才增加可用资源或拆分内存密集型视图。 有关详细信息,请参阅 “优化具体化视图”。

MaterializedViewResult 指标

MaterializedViewResult 指标提供每个具体化周期的结果。 使用它可识别物化视图健康状况方面的问题。 该指标包括 DatabaseMaterializedViewNameResult 这三个维度。

Value Meaning Action
Success 物化周期已成功完成。 None.
SourceTableNotFound 源表已被删除,因此物化视图已被自动禁用。 还原源表并 启用具体化视图
SourceTableSchemaChange 源表架构与具体化视图定义不兼容,因此会自动禁用该视图。 使源架构和具体化视图查询兼容,然后 启用具体化视图
InsufficientCapacity 可用的数据引入能力正在限制实体化。 故障可能是暂时性的,但定期值表示容量问题。 有关Azure 数据资源管理器,请参阅引入容量 增加可用资源
InsufficientResources 具体化超出了单个操作允许的内存限制。 增加具体化内存限制 或减少每个周期所需的内存。

跟随者数据库中的物化视图

可以在 后续数据库中定义具体化视图。 但是,应从领导者数据库中监视这些具体化视图,在该数据库中定义具体化视图。 具体而言:

  • 与具体化视图执行相关的指标MaterializedViewResultMaterializedViewExtentsRebuild)仅存在于先导数据库中。 与监视(MaterializedViewAgeSeconds、、MaterializedViewHealthMaterializedViewRecordsInDelta)相关的指标也出现在后续数据库中。