Condividi tramite


Metriche in EF Core

Entity Framework Core (EF Core) espone metriche numeriche continue che possono fornire una buona indicazione dell'integrità del programma. Queste metriche possono essere utilizzate per gli scopi seguenti:

  • Tenere traccia del carico generale del database in tempo reale quando l'applicazione è in esecuzione
  • Esporre procedure di codifica problematiche che possono causare una riduzione delle prestazioni
  • Tenere traccia e isolare il comportamento anomalo del programma

Metrica

EF Core segnala le metriche tramite l'API standard System.Diagnostics.Metrics. Microsoft.EntityFrameworkCore è il nome del contatore. È consigliabile leggere la documentazione di .NET sulle metriche.

Nota

Questa funzionalità verrà introdotta in EF Core 9.0 (in anteprima). Vedere i contatori degli eventi seguenti per le versioni precedenti di EF Core.

Metriche e loro significato

Metrica: microsoft.entityframeworkcore.active_dbcontexts

Nome Tipo di strumento Unità (UCUM) Descrizione
microsoft.entityframeworkcore.active_dbcontexts ObservableUpDownCounter {dbcontext} Numero di istanze attualmente attive DbContext .

Disponibile a partire da: Entity Framework Core 9.0.

Metrica: microsoft.entityframeworkcore.queries

Nome Tipo di strumento Unità (UCUM) Descrizione
microsoft.entityframeworkcore.queries ObservableCounter {query} Conteggio cumulativo delle query eseguite.

Disponibile a partire da: Entity Framework Core 9.0.

Metrica: microsoft.entityframeworkcore.savechanges

Nome Tipo di strumento Unità (UCUM) Descrizione
microsoft.entityframeworkcore.savechanges ObservableCounter {savechanges} Conteggio cumulativo delle modifiche salvate.

Disponibile a partire da: Entity Framework Core 9.0.

Metrica: microsoft.entityframeworkcore.compiled_query_cache_hits

Nome Tipo di strumento Unità (UCUM) Descrizione
microsoft.entityframeworkcore.compiled_query_cache_hits ObservableCounter {hits} Numero cumulativo di riscontri per la cache delle query compilate.

Disponibile a partire da: Entity Framework Core 9.0.

Metrica: microsoft.entityframeworkcore.compiled_query_cache_misses

Nome Tipo di strumento Unità (UCUM) Descrizione
microsoft.entityframeworkcore.compiled_query_cache_misses ObservableCounter {misses} Numero cumulativo di riscontri per la cache delle query compilate.

Disponibile a partire da: Entity Framework Core 9.0.

Metrica: microsoft.entityframeworkcore.execution_strategy_operation_failures

Nome Tipo di strumento Unità (UCUM) Descrizione
microsoft.entityframeworkcore.execution_strategy_operation_failures ObservableCounter {failure} Numero cumulativo di operazione non riuscita eseguita da un IExecutionStrategy.

Disponibile a partire da: Entity Framework Core 9.0.

Metrica: microsoft.entityframeworkcore.optimistic_concurrency_failures

Nome Tipo di strumento Unità (UCUM) Descrizione
microsoft.entityframeworkcore.optimistic_concurrency_failures ObservableCounter {failure} Numero cumulativo di errori di concorrenza ottimistica.

Disponibile a partire da: Entity Framework Core 9.0.

Contatori eventi (legacy)

EF Core segnala le metriche tramite la funzionalità standard dei contatori eventi .NET; È consigliabile leggere questo post di blog per una rapida panoramica del funzionamento dei contatori.

Connettersi a un processo usando dotnet-counters

Lo strumento dotnet-counters può essere usato per collegarsi a un processo in esecuzione e segnalare regolarmente i contatori degli eventi di EF Core. Non è necessario eseguire alcuna operazione speciale nel programma affinché questi contatori siano disponibili.

Installare prima lo strumento dotnet-counters: dotnet tool install --global dotnet-counters.

Trovare quindi l'ID processo (PID) del processo .NET che esegue l'applicazione EF Core:

  1. Aprire Gestione attività di Windows facendo clic con il pulsante destro del mouse sulla barra delle applicazioni e selezionando "Gestione attività".
  2. Assicurarsi che l'opzione "Altri dettagli" sia selezionata nella parte inferiore della finestra.
  3. Nella scheda Processi fare clic con il pulsante destro del mouse su una colonna e verificare che la colonna PID sia abilitata.
  4. Individuare l'applicazione nell'elenco dei processi e ottenere il relativo ID processo dalla colonna PID.

All'interno dell'applicazione .NET, l'ID processo è disponibile come Process.GetCurrentProcess().Id; può essere utile per la stampa del PID all'avvio.

Infine, avviare dotnet-counters come segue:

dotnet counters monitor Microsoft.EntityFrameworkCore -p <PID>

dotnet-counters ora si connetterà al processo in esecuzione e inizierà a segnalare i dati dei contatori continui:

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

Contatori e loro significato

Nome contatore Descrizione
Active DbContexts
(active-db-contexts)
Numero di istanze DbContext attive e non predisposte attualmente nell'applicazione. Se questo numero aumenta continuamente, è possibile che si verifichi una perdita perché le istanze DbContext non vengono eliminate correttamente. Si noti che se il pool di contesto è abilitato, questo numero include istanze DbContext in pool non attualmente in uso.
Errori delle operazioni di strategia di esecuzione
(total-execution-strategy-operation-failures e execution-strategy-operation-failures-per-second)
Numero di volte in cui un'operazione di database non è riuscita a essere eseguita. Se è abilitata una strategia di ripetizione dell'esecuzione, questo include ogni singolo errore all'interno di più tentativi nella stessa operazione. Questo può essere usato per rilevare problemi temporanei con l'infrastruttura.
Errori di concorrenza ottimistica
(total-optimistic-concurrency-failures e optimistic-concurrency-failures-per-second)
Numero di volte in cui non è stato possibile eseguire SaveChanges a causa di un errore di concorrenza ottimistica, perché i dati nell'archivio dati sono stati modificati dopo il caricamento del codice. Questo corrisponde a DbUpdateConcurrencyException che viene lanciato.
Query
(total-queries e queries-per-second)
Numero di query eseguite.
Query Cache Hit Rate (%)
(compiled-query-cache-hit-rate)
Rapporto tra riscontri nella cache delle query e mancati riscontri. La prima volta che una determinata query LINQ viene eseguita da EF Core (esclusi i parametri), deve essere compilata in un processo relativamente pesante. In un'applicazione normale, tutte le query vengono riutilizzate e la frequenza di riscontri della cache delle query deve essere stabile al 100% dopo un periodo di riscaldamento iniziale. Se questo numero è inferiore al 100% nel tempo, è possibile che si verifichino prestazioni ridotte a causa di compilazioni ripetute, che potrebbero essere il risultato della generazione di query dinamiche non ottimali.
Salvataggio di modifiche
(total-save-changes e save-changes-per-second)
Numero di chiamate a SaveChanges. Si noti che SaveChanges salva più modifiche in un singolo batch, quindi questo non rappresenta necessariamente ogni singolo aggiornamento eseguito su una singola entità.

Risorse aggiuntive