Superviser les vues matérialisées
S’applique à : ✅Microsoft Fabric✅Azure Data Explorer
Surveillez l’intégrité de la vue matérialisée de la manière suivante :
- Surveillez métriques de vues matérialisées dans le portail Azure avec Azure Monitor. Utilisez la métrique d’âge de la vue matérialisée,
MaterializedViewAgeSeconds
, comme métrique principale pour surveiller l’actualisation de la vue.
- Surveillez métriques de vue matérialisée dans votre espace de travail Microsoft Fabric. Utilisez la métrique d’âge de la vue matérialisée,
MaterializedViewAgeSeconds
comme métrique principale pour surveiller l’actualisation de la vue. Pour plus d’informations, consultez Activer la surveillance dans votre espace de travail.
Surveillez la propriété
IsHealthy
à l’aide de.show materialized-view
.Vérifiez les échecs à l’aide
.show materialized-view failures
de .
Remarque
La matérialisation n’ignore jamais les données, même s’il existe des défaillances constantes. La vue est toujours garantie de retourner l’instantané le plus à jour de la requête, en fonction de tous les enregistrements de la table source. Les échecs constants dégradent considérablement les performances des requêtes, mais ne provoquent pas de résultats incorrects dans les requêtes d’affichage.
Résolution des problèmes de vues matérialisées non saines
Si la métrique MaterializedViewAge
augmente constamment et que la métrique MaterializedViewHealth
indique que la vue n’est pas saine, suivez ces recommandations pour identifier la cause racine :
Vérifiez le nombre de vues matérialisées sur le cluster et la capacité actuelle pour les vues matérialisées :
.show capacity | where Resource == "MaterializedView" | project Resource, Total, Consumed
de sortie
Ressource Total Consommé MaterializedView 1 0 - Le nombre de vues matérialisées qui peuvent s’exécuter simultanément dépend de la capacité affichée dans la colonne
Total
, tandis que la colonneConsumed
affiche le nombre de vues matérialisées en cours d’exécution. Vous pouvez utiliser la stratégie de capacité vues matérialisées pour spécifier le nombre minimal et maximal d’opérations simultanées, en remplaçant le niveau d’accès concurrentiel par défaut du système. Le système détermine la concurrence actuelle, affichée dansTotal
, en fonction des ressources disponibles du cluster. L’exemple suivant remplace la décision du système et modifie les opérations simultanées minimales d’un à trois :
.alter-merge cluster policy capacity '{ "MaterializedViewsCapacity": { "ClusterMinimumConcurrentOperations": 3 } }'
- Si vous modifiez explicitement cette stratégie, surveillez l’intégrité du cluster et vérifiez que d’autres charges de travail ne sont pas affectées par cette modification.
- Le nombre de vues matérialisées qui peuvent s’exécuter simultanément dépend de la capacité affichée dans la colonne
Vérifiez s’il existe des défaillances pendant le processus de matérialisation à l’aide de .show matérialisé-view échecs.
- Si l’erreur est permanente, le système désactive automatiquement la vue matérialisée. Pour vérifier s’il est désactivé, utilisez la commande .show materialized-view et vérifiez si la valeur de la colonne
IsEnabled
estfalse
. Vérifiez ensuite le journal pour l’événement désactivé avec la commande .show journal. Un exemple d’échec permanent est une modification de schéma de table source qui le rend incompatible avec la vue matérialisée. Pour plus d’informations, consultez commande .create materialized-view. - Si l’échec est temporaire, le système retente automatiquement l’opération. Toutefois, l’échec peut retarder la matérialisation et augmenter l’âge de la vue matérialisée. Ce type d’échec se produit, par exemple, lorsque vous atteignez des limites de mémoire ou avec un délai d’attente de requête. Pour plus d’informations sur la résolution des défaillances temporaires, consultez les recommandations suivantes.
- Si l’erreur est permanente, le système désactive automatiquement la vue matérialisée. Pour vérifier s’il est désactivé, utilisez la commande .show materialized-view et vérifiez si la valeur de la colonne
Analysez le processus de matérialisation à l’aide de la commande .show commands-and-queries. Remplacez nom_base de données et ViewName pour filtrer une vue spécifique :
.show commands-and-queries | where Database == "DatabaseName" and ClientActivityId startswith "DN.MaterializedViews;ViewName;"
Vérifiez la consommation de mémoire dans la colonne
MemoryPeak
pour identifier les opérations ayant échoué en raison de limites de mémoire, telles que requêtes de fuite. Par défaut, le processus de matérialisation est limité à un pic de mémoire de 15 Go par nœud. Si les requêtes ou commandes exécutées pendant le processus de matérialisation dépassent cette valeur, la matérialisation échoue en raison de limites de mémoire. Pour augmenter le pic de mémoire par nœud, modifiez le groupe de charge de travail $materialized vues. L’exemple suivant modifie le groupe de charges de travail de vues matérialisées pour utiliser un maximum de 64 Go de pic de mémoire par nœud pendant la matérialisation :.alter-merge workload_group ['$materialized-views'] ``` { "RequestLimitsPolicy": { "MaxMemoryPerQueryPerNode": { "Value": 68719241216 } } }
Remarque
MaxMemoryPerQueryPerNode
ne peut pas dépasser 50% de la mémoire totale disponible sur chaque nœud.Vérifiez si le processus de matérialisation atteint le cache froid. L’exemple suivant montre les statistiques de cache au cours du dernier jour pour la vue matérialisée,
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))
de sortie
HotCacheHits HotCacheMisses HotCacheRetrieved ColdCacheHits ColdCacheMisses ColdCacheRetrieved 26 Go 0 octets 0 octets 1 Go 0 octets 866 Mo Si la vue n’est pas entièrement dans le cache chaud, la matérialisation peut rencontrer des absences de disque, ce qui ralentit considérablement le processus.
L’augmentation de la stratégie de mise en cache pour la vue matérialisée permet d’éviter les absences de cache. Pour plus d’informations, consultez stratégie de mise en cache et de mise en cache à chaud et à froid et .alter materialized-view policy caching.
Vérifiez si la matérialisation analyse les anciens enregistrements en vérifiant le
ScannedExtentsStatistics
avec la commande .show. Si le nombre d’étendues analysées est élevé et que leMinDataScannedTime
est ancien, le cycle de matérialisation doit analyser tout ou la plupart des matérialisés partie de la vue. L’analyse est nécessaire pour rechercher des intersections avec le delta. Pour plus d’informations sur le delta et la partie matérialisée, consultez Fonctionnement des vues matérialisées. Les recommandations suivantes permettent de réduire la quantité de données analysées dans les cycles matérialisés en minimisant l’intersection avec le delta.
Si le cycle de matérialisation analyse une grande quantité de données, notamment le cache à froid, envisagez d’apporter les modifications suivantes à la définition de vue matérialisée :
- Incluez une clé de groupe par
datetime
dans la définition d’affichage. Cela peut réduire considérablement la quantité de données analysées, tant qu’il n’y a pas de données en retard dans cette colonne. Pour plus d’informations, consultez conseils sur les performances. Vous devez créer une vue matérialisée, car les mises à jour des clés groupées ne sont pas prises en charge. - Utilisez un
lookback
dans le cadre de la définition de la vue. Pour plus d’informations, consultez .create materialized view supported properties.
- Incluez une clé de groupe par
- Vérifiez s’il existe suffisamment de capacité d’ingestion en vérifiant si la métrique
MaterializedViewResult
ou métrique IngestionUtilization afficher les valeursInsufficientCapacity
. Vous pouvez augmenter la capacité d’ingestion en mettant à l’échelle les ressources disponibles (par défaut) ou en modifiant la stratégie de capacité d’ingestion .
- Vérifiez s’il existe suffisamment de capacité d’ingestion en vérifiant si la métrique
MaterializedViewResult
affiche des valeursInsufficientCapacity
. Vous pouvez augmenter la capacité d’ingestion en mettant à l’échelle les ressources disponibles.
Si la vue matérialisée n’est toujours pas saine, le service n’a pas suffisamment de capacité ni de ressources pour matérialiser toutes les données à temps. Tenez compte des options suivantes :
- Effectuez un scale-out du cluster en augmentant le nombre minimal d’instances. mise à l’échelle automatique optimisée ne prend pas en compte les vues matérialisées et ne met pas automatiquement à l’échelle le cluster si les vues matérialisées ne sont pas saines. Vous devez définir le nombre minimal d’instances pour fournir au cluster davantage de ressources pour prendre en charge les vues matérialisées.
- Effectuez un scale-out d’Eventhouse pour lui fournir davantage de ressources pour prendre en charge les vues matérialisées. Pour plus d’informations, consultez Activer la consommation minimale.
- Divisez la vue matérialisée en plusieurs vues plus petites, chacune couvrant un sous-ensemble des données. Par exemple, vous pouvez les fractionner en fonction d’une clé de cardinalité élevée à partir des clés group-by de la vue matérialisée. Toutes les vues sont basées sur la même table source, et chaque vue filtre par
SourceTable | where hash(key, number_of_views) == i
, oùi
fait partie de l’ensemble{0,1,…,number_of_views-1}
. Vous pouvez ensuite définir une fonction stockée qui unions toutes les vues matérialisées plus petites. Utilisez cette fonction dans les requêtes pour accéder aux données combinées.
Tout en fractionnant la vue peut augmenter l’utilisation du processeur, cela réduit le pic de mémoire dans les cycles de matérialisation. La réduction du pic de mémoire peut vous aider si l’affichage unique échoue en raison de limites de mémoire.
Métrique MaterializedViewResult
La métrique MaterializedViewResult
fournit des informations sur le résultat d’un cycle de matérialisation et peut être utilisée pour identifier les problèmes dans l’état d’intégrité de l’affichage matérialisé. La métrique inclut la dimension et Database
MaterializedViewName
la Result
valeur.
La Result
dimension peut avoir l’une des valeurs suivantes :
Réussite: la matérialisation s’est terminée avec succès.
SourceTableNotFound: la table source de la vue matérialisée a été supprimée, de sorte que la vue matérialisée est désactivée automatiquement.
SourceTableSchemaChange: le schéma de la table source a changé d’une manière qui n’est pas compatible avec la définition de vue matérialisée. Étant donné que la requête de vue matérialisée ne correspond plus au schéma d’affichage matérialisé, la vue matérialisée est automatiquement désactivée.
- InsufficientCapacity: l’instance n’a pas suffisamment de capacité pour matérialiser la vue matérialisée, en raison d’un manque de capacité d’ingestion . Même si les défaillances de capacité insuffisantes peuvent être temporaires, si elles se réoccupéent souvent, essayez d’effectuer un scale-out de l’instance ou d’augmenter la capacité pertinente dans la stratégie.
- InsufficientCapacity: l’instance n’a pas suffisamment de capacité pour matérialiser la vue matérialisée, en raison d’un manque de capacité d’ingestion. Bien que les défaillances de capacité insuffisantes puissent être temporaires, si elles se réoccupéent souvent, essayez d’effectuer un scale-out de l’instance ou d’augmenter la capacité. Pour plus d’informations, consultez Planifier votre taille de capacité.
- InsufficientResources : la base de données ne dispose pas de ressources suffisantes (processeur/mémoire) pour matérialiser la vue matérialisée. Même si des erreurs de ressources insuffisantes peuvent être temporaires, si elles se réoccupéent souvent, essayez de monter en puissance ou d’effectuer un scale-out. Pour plus d’idées, consultez Résolution des problèmes de vues matérialisées non saines.
Vues matérialisées dans les bases de données de suivi
Les vues matérialisées peuvent être définies dans les bases de données de suivi. Toutefois, la surveillance de ces vues matérialisées doit être basée sur la base de données leader, où la vue matérialisée est définie. Plus précisément :
-
MaterializedViewExtentsRebuild
dans la base de données leader. Les métriques liées à la surveillance (MaterializedViewAgeSeconds
,MaterializedViewHealth
,MaterializedViewRecordsInDelta
) apparaissent également dans les bases de données de l’éditeur de suivi.
- La commande .show materialized-view échecs fonctionne uniquement dans la base de données leader.
Suivre la consommation des ressources
Consommation de ressources de vues matérialisées : les ressources consommées par le processus de matérialisation des vues matérialisées peuvent être suivies à l’aide de la .show commands-and-queries
commande. Filtrez les enregistrements d’une vue spécifique à l’aide des éléments suivants (remplacez DatabaseName
et ViewName
) :
.show commands-and-queries
| where Database == "DatabaseName" and ClientActivityId startswith "DN.MaterializedViews;ViewName;"