Partager via


Mesures dans EF Core

Entity Framework Core (EF Core) fournit des mesures numériques continues permettant d'évaluer l'état de santé de votre programme. Ces mesures peuvent être utilisées aux fins suivantes :

  • Suivi de la charge générale de la base de données en temps réel lorsque l'application est en cours d'exécution
  • Mise en évidence des pratiques de codage problématiques qui peuvent entraîner une détérioration des performances
  • Identification et mise à l'écart des comportements anormaux d'un programme

Métriques

EF Core rapporte des mesures via l’API System.Diagnostics.Metrics standard. Microsoft.EntityFrameworkCore est le nom du compteur. Il est recommandé de lire la documentation .NET sur les mesures.

Remarque

Cette fonctionnalité est introduite dans EF Core 9.0 (en préversion). Voir les compteurs d’événements ci-dessous pour les versions antérieures d’EF Core.

Les mesures et leur signification

Métrique : microsoft.entityframeworkcore.active_dbcontexts

Nom Type d’instrument Unité (UCUM) Description
microsoft.entityframeworkcore.active_dbcontexts ObservableUpDownCounter {dbcontext} Nombre d’instances DbContext actuellement actives.

Disponible à partir de .Entity Framework Core 9.0.

Métrique : microsoft.entityframeworkcore.queries

Nom Type d’instrument Unité (UCUM) Description
microsoft.entityframeworkcore.queries ObservableCounter {query} Nombre cumulé de requêtes exécutées.

Disponible à partir de .Entity Framework Core 9.0.

Métrique : microsoft.entityframeworkcore.savechanges

Nom Type d’instrument Unité (UCUM) Description
microsoft.entityframeworkcore.savechanges ObservableCounter {savechanges} Nombre cumulé de modifications enregistrées.

Disponible à partir de .Entity Framework Core 9.0.

Métrique : microsoft.entityframeworkcore.compiled_query_cache_hits

Nom Type d’instrument Unité (UCUM) Description
microsoft.entityframeworkcore.compiled_query_cache_hits ObservableCounter {hits} Nombre cumulé d'occurrences pour le cache de requête compilé.

Disponible à partir de .Entity Framework Core 9.0.

Métrique : microsoft.entityframeworkcore.compiled_query_cache_misses

Nom Type d’instrument Unité (UCUM) Description
microsoft.entityframeworkcore.compiled_query_cache_misses ObservableCounter {misses} Nombre cumulé d'échecs pour le cache de requête compilé.

Disponible à partir de .Entity Framework Core 9.0.

Métrique : microsoft.entityframeworkcore.execution_strategy_operation_failures

Nom Type d’instrument Unité (UCUM) Description
microsoft.entityframeworkcore.execution_strategy_operation_failures ObservableCounter {failure} Nombre cumulé d’opérations ayant échoué exécutées par un IExecutionStrategy.

Disponible à partir de .Entity Framework Core 9.0.

Métrique : microsoft.entityframeworkcore.optimistic_concurrency_failures

Nom Type d’instrument Unité (UCUM) Description
microsoft.entityframeworkcore.optimistic_concurrency_failures ObservableCounter {failure} Nombre cumulé d’échecs d’accès concurrentiel optimistes.

Disponible à partir de .Entity Framework Core 9.0.

Compteurs d’événements (hérités)

EF Core rapporte les mesures via la fonctionnalité standard de compteurs d'événements .NET. Il est recommandé de lire ce billet de blog pour obtenir un aperçu du fonctionnement des compteurs.

Rattachement à un processus à l'aide de dotnet-counters

L'outil dotnet-counters peut être utilisé pour se rattacher à un processus en cours d'exécution et signaler les compteurs d'événements EF Core à intervalles réguliers. Aucune action particulière ne doit être effectuée dans le programme pour que ces compteurs soient disponibles.

Tout d'abord, installez l'dotnet-counters outil : dotnet tool install --global dotnet-counters.

Ensuite, recherchez l'identifiant du processus (PID) .NET exécutant votre application EF Core :

  1. Ouvrez le Gestionnaire des tâches de Windows en effectuant un clic droit sur la barre des tâches et en sélectionnant « Gestionnaire des tâches ».
  2. Vérifiez que l'option « Plus de détails » est sélectionnée en bas de la fenêtre.
  3. Dans l'onglet Processus, effectuez un clic droit sur une colonne et vérifiez que la colonne PID est activée.
  4. Recherchez votre application dans la liste des processus et obtenez son identifiant de processus dans la colonne PID.

Au sein de votre application .NET, l'identifiant de processus est disponible en tant que Process.GetCurrentProcess().Id. Cela peut s'avérer utile pour imprimer le PID au démarrage.

Pour finir, lancez dotnet-counters comme indiqué ci-dessous :

dotnet counters monitor Microsoft.EntityFrameworkCore -p <PID>

dotnet-counters sera désormais rattaché à votre processus en cours d'exécution et commencera à rapporter les données du compteur en continu :

Press p to pause, r to resume, q to quit.
 Status: Running

[Microsoft.EntityFrameworkCore]
    Active DbContexts                                               1
    Execution Strategy Operation Failures (Count / 1 sec)           0
    Execution Strategy Operation Failures (Total)                   0
    Optimistic Concurrency Failures (Count / 1 sec)                 0
    Optimistic Concurrency Failures (Total)                         0
    Queries (Count / 1 sec)                                         1
    Queries (Total)                                               189
    Query Cache Hit Rate (%)                                      100
    SaveChanges (Count / 1 sec)                                     0
    SaveChanges (Total)                                             0

Les compteurs et leur signification

Nom du compteur Description
Active DbContexts
(active-db-contexts)
Indique le nombre d'instances DbContext actives et non-éliminées actuellement dans votre application. Si ce nombre augmente sans cesse, il est possible qu'il y ait une fuite car les instances de DbContext ne sont pas éliminées correctement. Remarque : si le regroupement contextuel est activé, ce nombre inclut les instances DbContext groupées qui ne sont pas en cours d'utilisation.
Échecs des opérations de stratégie d'exécution
(total-execution-strategy-operation-failures et execution-strategy-operation-failures-per-second)
Indique le nombre de fois qu'une opération de base de données n'a pas pu s'exécuter. Si une stratégie d'exécution par nouvelle tentative est activée, elle inclut chaque échec individuel dans le cadre de tentatives multiples pour la même opération. Elle peut être utilisée pour détecter des problèmes temporaires dans votre infrastructure.
Échecs d'accès concurrentiel optimiste
(total-optimistic-concurrency-failures et optimistic-concurrency-failures-per-second)
Indique le nombre de fois où SaveChanges a échoué en raison d'une erreur d'accès concurrentiel optimiste, car les données de la banque de données ont été modifiées depuis le chargement de votre code. Cela correspond au lancement de DbUpdateConcurrencyException.
Requêtes
(total-queries et queries-per-second)
Indique le nombre de requêtes exécutées.
Taux d'accès au cache des requêtes (%)
(compiled-query-cache-hit-rate)
Indique le ratio entre les succès et les échecs d'accès au cache des requêtes. La première fois qu'une requête LINQ donnée est exécutée par EF Core (à l'exception des paramètres), elle doit être compilée dans le cadre d'un processus relativement lourd. Dans une application normale, toutes les requêtes sont réutilisées et le taux d'accès au cache des requêtes doit être stable à 100 % après une période de préchauffage initiale. Si ce taux demeure inférieur à 100 % pendant un certain temps, il se peut que les performances se dégradent en raison des compilations répétées, ce qui pourrait être le résultat d'une génération dynamique de requêtes sous-optimale.
SaveChanges
(total-save-changes et save-changes-per-second)
Indique le nombre de fois où SaveChanges a été appelé. Remarque : SaveChanges enregistre plusieurs modifications dans un même lot, ce qui ne représente pas nécessairement chaque mise à jour individuelle effectuée sur une même entité.

Ressources supplémentaires