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:
- Aprire Gestione attività di Windows facendo clic con il pulsante destro del mouse sulla barra delle applicazioni e selezionando "Gestione attività".
- Assicurarsi che l'opzione "Altri dettagli" sia selezionata nella parte inferiore della finestra.
- Nella scheda Processi fare clic con il pulsante destro del mouse su una colonna e verificare che la colonna PID sia abilitata.
- 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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per