Dela via


Mätvärden i EF Core

Entity Framework Core (EF Core) exponerar kontinuerliga numeriska mått som kan ge en bra indikation på programmets hälsa. Dessa mått kan användas i följande syften:

  • Spåra allmän databasbelastning i realtid när programmet körs
  • Exponera problematiska kodningsmetoder som kan leda till försämrade prestanda
  • Spåra och isolera avvikande programbeteende

Mätvärden

EF Core rapporterar mått via standard-API System.Diagnostics.Metrics :et. Microsoft.EntityFrameworkCore är namnet på mätaren. Vi rekommenderar att du läser .NET-dokumentation om mått.

Anmärkning

Den här funktionen introducerades i EF Core 9.0. Se händelseräknare nedan för äldre versioner av EF Core.

Mått och deras betydelse

Mått: microsoft.entityframeworkcore.active_dbcontexts

Namn Instrumenttyp Enhet (UCUM) Beskrivning
microsoft.entityframeworkcore.active_dbcontexts ObservableUpDownCounter {dbcontext} Antal aktiva DbContext instanser.

Tillgänglig från och med: Entity Framework Core 9.0.

Mått: microsoft.entityframeworkcore.queries

Namn Instrumenttyp Enhet (UCUM) Beskrivning
microsoft.entityframeworkcore.queries ObservableCounter {query} Ackumulerat antal utförda frågor.

Tillgänglig från och med: Entity Framework Core 9.0.

Mått: microsoft.entityframeworkcore.savechanges

Namn Instrumenttyp Enhet (UCUM) Beskrivning
microsoft.entityframeworkcore.savechanges ObservableCounter {savechanges} Ackumulerat antal sparade ändringar.

Tillgänglig från och med: Entity Framework Core 9.0.

Mått: microsoft.entityframeworkcore.compiled_query_cache_hits

Namn Instrumenttyp Enhet (UCUM) Beskrivning
microsoft.entityframeworkcore.compiled_query_cache_hits ObservableCounter {hits} Ackumulerat antal träffar för den kompilerade frågecachen.

Tillgänglig från och med: Entity Framework Core 9.0.

Mått: microsoft.entityframeworkcore.compiled_query_cache_misses

Namn Instrumenttyp Enhet (UCUM) Beskrivning
microsoft.entityframeworkcore.compiled_query_cache_misses ObservableCounter (observerbar räknare) {misses} Ackumulerat antal missar för den kompilerade frågecachen.

Tillgänglig från och med: Entity Framework Core 9.0.

Mått: microsoft.entityframeworkcore.execution_strategy_operation_failures

Namn Instrumenttyp Enhet (UCUM) Beskrivning
microsoft.entityframeworkcore.execution_strategy_operation_failures ObservableCounter {failure} Kumulativt antal misslyckade operationer som utförts av en IExecutionStrategy.

Tillgänglig från och med: Entity Framework Core 9.0.

Mått: microsoft.entityframeworkcore.optimistic_concurrency_failures

Namn Instrumenttyp Enhet (UCUM) Beskrivning
microsoft.entityframeworkcore.optimistic_concurrency_failures ObservableCounter {failure} Ackumulerat antal optimistiska samtidighetsfel.

Tillgänglig från och med: Entity Framework Core 9.0.

Händelseräknare (äldre)

EF Core rapporterar mått via standardfunktionen för .NET-händelseräknare. Vi rekommenderar att du läser det här blogginlägget för en snabb översikt över hur räknare fungerar.

Koppla till en process med dotnet-counters

Verktyget dotnet-counters kan användas för att ansluta till en process som körs och rapportera EF Core-händelseräknare regelbundet. inget särskilt behöver göras i programmet för att dessa räknare ska vara tillgängliga.

dotnet-counters Installera först verktyget: dotnet tool install --global dotnet-counters.

Leta sedan upp process-ID :t (PID) för .NET-processen som kör EF Core-programmet:

  1. Öppna Aktivitetshanteraren i Windows genom att högerklicka på aktivitetsfältet och välja Aktivitetshanteraren.
  2. Kontrollera att alternativet "Mer information" är markerat längst ned i fönstret.
  3. På fliken Processer högerklickar du på en kolumn och kontrollerar att PID-kolumnen är aktiverad.
  4. Leta upp ditt program i processlistan och hämta dess process-ID från PID-kolumnen.

I .NET-programmet är process-ID:t tillgängligt som Process.GetCurrentProcess().Id. Det kan vara användbart för att skriva ut PID vid start.

Starta slutligen dotnet-counters på följande sätt:

dotnet counters monitor Microsoft.EntityFrameworkCore -p <PID>

dotnet-counters ansluter nu till din pågående process och börjar rapportera kontinuerliga räknardata:

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

Räknare och deras innebörd

Räknarens namn Beskrivning
Active DbContexts
(active-db-contexts)
Antalet aktiva, oinställda DbContext-instanser som för närvarande finns i din applikation. Om det här antalet växer kontinuerligt kan du ha en läcka eftersom DbContext-instanser inte tas bort korrekt. Observera att om kontextpooler är aktiverade innehåller det här numret poolade DbContext-instanser som inte används för närvarande.
Fel vid utförandestrategioperationer
(total-execution-strategy-operation-failures och execution-strategy-operation-failures-per-second)
Antalet gånger som en databasåtgärd inte kunde köras. Om en strategi för återförsökskörning är aktiverad inkluderar detta varje enskilt fel inom flera försök på samma åtgärd. Detta kan användas för att identifiera tillfälliga problem med infrastrukturen.
Optimistiska samtidighetsfel
(total-optimistic-concurrency-failures och optimistic-concurrency-failures-per-second)
Antalet gånger SaveChanges som misslyckades på grund av ett optimistiskt samtidighetsfel, eftersom data i datalagret har ändrats sedan koden lästes in. Detta motsvarar att en DbUpdateConcurrencyException utlösts.
Frågor
(total-queries och queries-per-second)
Antalet frågor som har körts.
Träfffrekvens för frågecache (%)
(compiled-query-cache-hit-rate)
Förhållandet mellan träffar och missar i cacheminnet för frågor. Första gången en viss LINQ-fråga körs av EF Core (exklusive parametrar) måste den kompileras i en relativt tung process. I ett normalt program återanvänds alla frågor och träfffrekvensen för frågecachen bör vara stabil vid 100% efter en första uppvärmningsperiod. Om det här talet är mindre än 100% över tid kan du uppleva degraderad perf på grund av upprepade kompileringar, vilket kan vara ett resultat av suboptimal dynamisk frågegenerering.
SparaÄndringar
(total-save-changes och save-changes-per-second)
Antalet gånger SaveChanges har anropats. Observera att SaveChanges sparar flera ändringar i en enda batch, så detta representerar inte nödvändigtvis varje enskild uppdatering som görs på en enda entitet.

Ytterligare resurser