監視具體化檢視

適用於: ✅Microsoft網狀架構Azure 數據總管

以下列方式監視具體化檢視的健康情況:

注意

具體化永遠不會略過任何數據,即使發生常數失敗也一樣。 檢視一律會根據源數據表中的所有記錄,傳回查詢的最新快照集。 常數失敗會大幅降低查詢效能,但不會在檢視查詢中造成不正確的結果。

針對狀況不良的具體化檢視進行疑難解答

計量 MaterializedViewHealth 會指出具體化檢視是否狀況良好。 具體化檢視在變成狀況不良之前,其年齡會由 MaterializedViewAgeSeconds 計量指出,逐漸增加。

具體化檢視可能會因為下列任何或所有原因而變成狀況不良:

  • 具體化程序失敗。 MaterializedViewResult 計量.show materialized-view failures命令可協助識別失敗的根本原因。
  • 由於源數據表的變更,系統可能已自動停用具體化檢視。 您可以藉由檢查從 .show materialized-view 命令傳回的數據行來檢查IsEnabled檢視是否已停用。 如需具體化檢視限制和已知問題的詳細資訊 ,請參閱詳細數據
  • 資料庫沒有足夠的容量,無法即時具體化所有傳入的數據。 在此情況下,執行中可能不會發生失敗。 不過,檢視的年齡逐漸增加,因為它無法跟上擷取率。 這種情況可能有數個根本原因:
    • 資料庫中有更多的具體化檢視,而且資料庫沒有足夠的容量可執行所有檢視。 請參閱 具體化檢視容量原則 ,以變更同時執行具體化檢視數目的預設設定。
    • 具體化速度很慢,因為新擷取的數據與檢視的大部分交集,而且每個具體化週期中有許多記錄要更新。 若要深入瞭解影響檢視效能的原因,請參閱 具體化檢視的運作方式。

MaterializedViewResult 計量

計量 MaterializedViewResult 提供具體化循環結果的相關信息,並可用來識別具體化檢視健康狀態中的問題。 計量包含 DatabaseMaterializedViewNameResult 維度。

維度 Result 可以有下列其中一個值:

  • 成功:具體化已順利完成。

  • SourceTableNotFound:已卸除具體化檢視的源數據表。 具體化檢視會因此自動停用。

  • SourceTableSchemaChange:源數據表的架構已以與具體化檢視定義不相容的方式變更(具體化檢視查詢不符合具體化檢視架構)。 具體化檢視會因此自動停用。

  • InsufficientCapacity:資料庫沒有足夠的容量來具體化具體化檢視。 這表示遺漏 擷取容量 或遺漏 具體化檢視容量。 容量失敗不足可能是暫時性的,但如果經常重新發生,建議您相應放大資料庫或增加原則中的相關容量。

  • InsufficientResources: 資料庫沒有足夠的資源(CPU/記憶體)具體化具體化檢視。 此失敗可能是暫時性的,但如果再次發生,請嘗試相應增加或相應放大資料庫。

    例如,下列命令會改變具體化檢視工作負載群組,以在具體化期間使用每個節點的記憶體上限 64 GB(GB)(預設值為 15 GB):

    .alter-merge workload_group ['$materialized-views'] ```
    {
      "RequestLimitsPolicy": {
        "MaxMemoryPerQueryPerNode": {
          "Value": 68719241216
        }
      }
    } ```
    

    注意

    MaxMemoryPerQueryPerNode 無法設定為每個節點總記憶體的 50% 以上。

追蹤資料庫中的具體化檢視

具體化檢視可以在追蹤資料庫中定義。 不過,這些具體化檢視的監視應該以定義具體化檢視的領導者資料庫為基礎。 具體而言:

  • 與具體化檢視執行 (MaterializedViewResultMaterializedViewExtentsRebuild) 相關的計量只會出現在領導者資料庫中。 與監視相關的計量 (MaterializedViewAgeSecondsMaterializedViewHealthMaterializedViewRecordsInDelta、 ) 也會出現在追蹤者資料庫中。

追蹤資源耗用量

具體化檢視資源耗用量: 具體化檢視具體化程式所耗用的資源可以使用 命令來 .show commands-and-queries 追蹤。 使用下列項目來篩選特定檢視的記錄(取代 DatabaseNameViewName):

.show commands-and-queries 
| where Database  == "DatabaseName" and ClientActivityId startswith "DN.MaterializedViews;ViewName;"