Contatori di eventi

Entity Framework Core (EF Core) espone metriche numeriche continue che possono fornire una buona indicazione dell'integrità del programma. Queste metriche possono essere usate 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

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.

Prima di tutto, installare lo dotnet-counters strumento : 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 SaveChanges non è stato possibile eseguire l'operazione a causa di un errore di concorrenza ottimistica, perché i dati nell'archivio dati sono stati modificati dopo il caricamento del codice. Corrisponde a un'eccezione DbUpdateConcurrencyException generata.
Query
(total-queries e queries-per-second)
Numero di query eseguite.
Frequenza riscontri cache query (%)
(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.
Savechanges
(total-save-changes e save-changes-per-second)
Numero di chiamate 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