共用方式為


監視具體化檢視

使用下列方式監視具體化檢視健康情況:

注意

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

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

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

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

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

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) 只存在於領導者資料庫中。 與監視 (MaterializedViewAgeSeconds、、 MaterializedViewHealthMaterializedViewRecordsInDelta) 相關的計量也會出現在下列資料庫中。
  • .show 具體化檢視失敗命令只能在領導者資料庫中運作。

追蹤資源耗用量

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

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