使用 “版本 ”下拉列表切换服务。 了解有关导航的详细信息。
适用于:✅ Azure 数据资源管理器
通过以下方式监视具体化视图的运行状况:
- 使用 Azure Monitor 在 Azure 门户 中监视 实体化视图指标。 使用具体化视图年龄指标
MaterializedViewAgeSeconds作为主要指标来监视视图的新鲜度。
使用
.show materialized-view监视IsHealthy属性。使用
.show materialized-view details检查区段、热缓存、大小和有效策略的详细信息。使用
.show materialized-view failures检查是否存在故障。
注意
物化绝不会跳过任何数据,即使持续发生故障也是如此。 该视图始终基于源表中的所有记录返回该查询的最新快照。 常量失败会显著降低查询性能,但不会在视图查询中导致不正确的结果。
排查异常的物化视图
如果 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。 将 DatabaseName 和 ViewName 替换为你的值:
.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 指标提供每个具体化周期的结果。 使用它可识别物化视图健康状况方面的问题。 该指标包括 Database、MaterializedViewName 和 Result 这三个维度。
| Value | Meaning | Action |
|---|---|---|
Success |
物化周期已成功完成。 | None. |
SourceTableNotFound |
源表已被删除,因此物化视图已被自动禁用。 | 还原源表并 启用具体化视图。 |
SourceTableSchemaChange |
源表架构与具体化视图定义不兼容,因此会自动禁用该视图。 | 使源架构和具体化视图查询兼容,然后 启用具体化视图。 |
InsufficientCapacity |
可用的数据引入能力正在限制实体化。 故障可能是暂时性的,但定期值表示容量问题。 有关Azure 数据资源管理器,请参阅引入容量。 | 增加可用资源。 |
InsufficientResources |
具体化超出了单个操作允许的内存限制。 | 增加具体化内存限制 或减少每个周期所需的内存。 |
跟随者数据库中的物化视图
可以在 后续数据库中定义具体化视图。 但是,应从领导者数据库中监视这些具体化视图,在该数据库中定义具体化视图。 具体而言:
- 与具体化视图执行相关的指标(
MaterializedViewResult、MaterializedViewExtentsRebuild)仅存在于先导数据库中。 与监视(MaterializedViewAgeSeconds、、MaterializedViewHealthMaterializedViewRecordsInDelta)相关的指标也出现在后续数据库中。
- .show materialized-view failures 命令仅在主数据库中有效。