Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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à è stata introdotta in EF Core 9.0. Vedere i contatori degli eventi seguenti per le versioni precedenti di EF Core.
Metriche e loro significato
microsoft.entityframeworkcore.active_dbcontexts
microsoft.entityframeworkcore.queries
microsoft.entityframeworkcore.savechanges
microsoft.entityframeworkcore.compiled_query_cache_hits
microsoft.entityframeworkcore.compiled_query_cache_misses
microsoft.entityframeworkcore.execution_strategy_operation_failures
microsoft.entityframeworkcore.optimistic_concurrency_failures
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:
- 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 |
---|---|
DbContexts attivi ( 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à. |