具体化されたビューを監視する
次の方法で、具体化されたビューの正常性を監視します:
- Azure portal* で具体化されたビュー*のメトリック*をモニター*します。
- 具体化されたビューの年齢メトリック
MaterializedViewAgeSeconds
を使用して、ビューの鮮度を監視する必要があります。 これは監視する主要なメトリックである必要があります。
- 具体化されたビューの年齢メトリック
.show materialized-view
から返されたIsHealthy
プロパティを監視します。.show materialized-view failures
を使用して故障を確認します。
Note
具体化は、一定の故障がある場合でも、データをスキップすることはありません。 ビュー*は常に、ソース* テーブル*内のすべてのレコード*に基づき、クエリ*の最新のスナップショットを返すことが保証されます。 一定の故障によってクエリ*のパフォーマンス*を大幅に低下させますが、ビュー* クエリ*で結果*が不正確になることはありません。
異常のある具体化されたビュー*のトラブルシューティング
MaterializedViewHealth
メトリック*は、具体化されたビュー*が正常であるかどうかを示します。 具体化されたビューが異常になる前に、 MaterializedViewAgeSeconds
メトリックによって示されるその年齢が徐々に増加します。
具体化されたビュー*は、次のいずれかまたはすべての理由で異常になることがあります。
- 具体化プロセス*が失敗しています。 MaterializedViewResult メトリックと
.show materialized-view failures
コマンドは、エラーの根本原因を特定するのに役立ちます。 - ソース テーブルが変更されたため、マテリアライズド ビューが自動的に無効になっている可能性があります。 ビューが無効になっているかどうかを確認するには、コマンドから返された
IsEnabled
列.show materialized-view
確認。 詳細については、 具体化されたビューの制限事項と既知の問題に関するページを参照してください - データベースには、すべての受信データをオンタイムで具体化するための十分な容量がありません。 この場合、実行中に故障が発生していない可能性があります。 ただし、ビューはインジェスト率に追いつくことができないため、徐々に年齢が増加します。 この状況には、いくつかの根本原因が考えられます。
- データベースには具体化されたビューが増え、データベースにはすべてのビューを実行するための十分な容量がありません。 同時に実行される具体化されたビュー*数の既定の設定*を変更するには、「具体化されたビュー*容量のポリシー*」を参照してください。
- 新しく取り込まれたデータはビューの大部分と交差し、各具体化 サイクルで更新するレコードが多数存在するため、具体化は遅くなります。 これがビューのパフォーマンスに影響を与える理由の詳細については、「具体化されたビューのしくみを参照してください。
MaterializedViewResultメトリック
メトリックはMaterializedViewResult
具体化サイクルの結果に関する情報を提供し、具体化されたビューの正常状態における問題を識別するために使用できます。 メトリックには、 Database
と MaterializedViewName
、および Result
ディメンションが含まれます。
Result
ディメンションは次のいずれかの値を有します:
Success: 具体化は正常に完了しました。
SourceTableNotFound: 具体化ビュー*のソース* テーブル*を削除しました。 具体化されたビュー*は、結果として自動的に無効*にされます。
SourceTableSchemaChange: ソース テーブルのスキーマが、具体化されたビュー定義と互換性のない方法で変更されました (具体化されたビュー クエリが具体化されたビュー スキーマと一致しません)。 具体化されたビュー*は、結果として自動的に無効*にされます。
InsufficientCapacity: 具体化されたビューを具体化するための十分な容量がデータベースにありません。 取り込み容量が不足しているか、または具体化されたビュー容量が不足していることを示します。 容量の不十分なエラーは一時的なものになる可能性がありますが、繰り返し発生する場合は、データベースをスケールアウトするか、ポリシーで関連する容量を増やすことをお勧めします。
InsufficientResources: 具体化されたビューを具体化するのに十分なリソース (CPU/メモリ) がデータベースにありません。 このエラーは一時的なものである可能性がありますが、繰り返し発生する場合は、データベースをスケールアップまたはスケールアウトしてみてください。
- 具体化プロセスがメモリ制限に達した場合は、 $materializedビュー ワークロード グループ 制限を増やして、具体化プロセスで消費するメモリまたは CPU を増やすことができます。
たとえば、次のコマンドは、具体化時にノードあたり最大 64 ギガバイト (GB) のメモリを使用するように具体化されたビューワークロード グループを変更します (既定値は 15 GB)。
.alter-merge workload_group ['$materialized-views'] ``` { "RequestLimitsPolicy": { "MaxMemoryPerQueryPerNode": { "Value": 68719241216 } } } ```
Note
MaxMemoryPerQueryPerNode を各ノードの合計メモリの 50% を超える値に設定することはできません。
フォロワー データベースの具体化されたビュー
具体化されたビューは、 follower データベースで定義できます。 ただし、これらの具体化されたビューの監視は、具体化されたビューが定義されているリーダー データベースに基づく必要があります。 具体的には、次のように使用します。
- 具体化されたビューの実行に関連するメトリック (
MaterializedViewResult
、MaterializedViewExtentsRebuild
) は、リーダー データベースにのみ存在します。 監視に関連するメトリック (MaterializedViewAgeSeconds
、MaterializedViewHealth
、MaterializedViewRecordsInDelta
) もフォロワー データベースに表示されます。
- .show materialized-view failures コマンドはリーダー データベースでのみ機能します。
リソース*消費量の追跡*
具体化されたビュー*のリソース*消費: 具体化されたビュー*の具体化プロセス*によって消費されるリソース*は、.show commands-and-queries
コマンドを使用して追跡*できます。 次のものを使用して、特定のビュー*のレコード*をフィルタリングします (DatabaseName
と ViewName
を置換*):
.show commands-and-queries
| where Database == "DatabaseName" and ClientActivityId startswith "DN.MaterializedViews;ViewName;"