Delen via


Metrische gegevens in EF Core

Entity Framework Core (EF Core) maakt doorlopende numerieke metrische gegevens beschikbaar die een goede indicatie kunnen geven van de status van uw programma. Deze metrische gegevens kunnen worden gebruikt voor de volgende doeleinden:

  • Algemene databasebelasting in realtime bijhouden terwijl de toepassing wordt uitgevoerd
  • Maak problematische coderingsprocedures beschikbaar die kunnen leiden tot verminderde prestaties
  • Afwijkend programmagedrag opsporen en isoleren

Statistieken

EF Core rapporteert metrische gegevens via de standaard-API System.Diagnostics.Metrics . Microsoft.EntityFrameworkCore is de naam van de meter. Het is raadzaam om .NET-documentatie te lezen over metrische gegevens.

Opmerking

Deze functie is geïntroduceerd in EF Core 9.0. Zie de gebeurtenistellers hieronder voor oudere versies van EF Core.

Metrische gegevens en hun betekenis

Metrische gegevens: microsoft.entityframeworkcore.active_dbcontexts

Naam Instrumenttype Eenheid (UCUM) Beschrijving
microsoft.entityframeworkcore.active_dbcontexts ObservableUpDownCounter {dbcontext} Aantal momenteel actieve DbContext exemplaren.

Beschikbaar vanaf: Entity Framework Core 9.0.

Metrische gegevens: microsoft.entityframeworkcore.queries

Naam Instrumenttype Eenheid (UCUM) Beschrijving
microsoft.entityframeworkcore.queries ObservableCounter {query} Cumulatief aantal uitgevoerde query's.

Beschikbaar vanaf: Entity Framework Core 9.0.

Metrische gegevens: microsoft.entityframeworkcore.savechanges

Naam Instrumenttype Eenheid (UCUM) Beschrijving
microsoft.entityframeworkcore.savechanges ObservableCounter {savechanges} Cumulatief aantal opgeslagen wijzigingen.

Beschikbaar vanaf: Entity Framework Core 9.0.

Metrische gegevens: microsoft.entityframeworkcore.compiled_query_cache_hits

Naam Instrumenttype Eenheid (UCUM) Beschrijving
microsoft.entityframeworkcore.compiled_query_cache_hits ObservableCounter {hits} Cumulatief aantal treffers voor de gegenereerde query cache.

Beschikbaar vanaf: Entity Framework Core 9.0.

Metrische gegevens: microsoft.entityframeworkcore.compiled_query_cache_misses

Naam Instrumenttype Eenheid (UCUM) Beschrijving
microsoft.entityframeworkcore.compiled_query_cache_misses ObservableCounter {misses} Cumulatief aantal misses voor de gecompileerde querycache.

Beschikbaar vanaf: Entity Framework Core 9.0.

Metrische gegevens: microsoft.entityframeworkcore.execution_strategy_operation_failures

Naam Instrumenttype Eenheid (UCUM) Beschrijving
microsoft.entityframeworkcore.execution_strategy_operation_failures ObservableCounter {failure} Cumulatief aantal mislukte bewerkingen uitgevoerd door een IExecutionStrategy.

Beschikbaar vanaf: Entity Framework Core 9.0.

Metrische gegevens: microsoft.entityframeworkcore.optimistic_concurrency_failures

Naam Instrumenttype Eenheid (UCUM) Beschrijving
microsoft.entityframeworkcore.optimistic_concurrency_failures ObservableCounter {failure} Cumulatief aantal optimistische gelijktijdigheidsfouten.

Beschikbaar vanaf: Entity Framework Core 9.0.

Gebeurtenistellers (verouderd)

EF Core rapporteert metrische gegevens via de standaardfunctie voor .NET-gebeurtenistellers; Het is raadzaam om dit blogbericht te lezen voor een kort overzicht van de werking van tellers.

Koppelen aan een proces met behulp van dotnet-counters

Het hulpprogramma dotnet-counters kan worden gebruikt om verbinding te maken met een actief proces en regelmatig EF Core-gebeurtenistellers te rapporteren; er hoeft in het programma niets speciaals gedaan te worden om deze tellers beschikbaar te maken.

Installeer eerst het dotnet-counters hulpprogramma: dotnet tool install --global dotnet-counters.

Zoek vervolgens de proces-id (PID) van het .NET-proces waarop uw EF Core-toepassing wordt uitgevoerd:

  1. Open Windows Taakbeheer door met de rechtermuisknop op de taakbalk te klikken en Taakbeheer te selecteren.
  2. Zorg ervoor dat de optie Meer details onderaan het venster is geselecteerd.
  3. Klik op het tabblad Processen met de rechtermuisknop op een kolom en zorg ervoor dat de PID-kolom is ingeschakeld.
  4. Zoek uw toepassing in de lijst met processen en haal de bijbehorende proces-id op uit de kolom PID.

In uw .NET-toepassing is de proces-id beschikbaar als Process.GetCurrentProcess().Id; dit kan handig zijn voor het afdrukken van de PID bij het opstarten.

Ten slotte start u dotnet-counters als volgt:

dotnet counters monitor --counters Microsoft.EntityFrameworkCore -p <PID>

dotnet-counters wordt nu gekoppeld aan het actieve proces en begint met het rapporteren van doorlopende prestatiemeteritems:

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

Tellers en hun betekenis

Tellernaam Beschrijving
Actieve DbContexts
(active-db-contexts)
Het aantal actieve, niet-afgesloten DbContext-exemplaren dat momenteel in uw toepassing aanwezig is. Als dit aantal continu groeit, hebt u mogelijk een lek omdat DbContext-exemplaren niet correct worden verwijderd. Houd er rekening mee dat als contextpooling is ingeschakeld, dit aantal pooled DbContext-exemplaren bevat die momenteel niet worden gebruikt.
Fouten in operatiestrategie-uitvoering
(total-execution-strategy-operation-failures en execution-strategy-operation-failures-per-second)
Het aantal keren dat een databasebewerking niet kan worden uitgevoerd. Als een strategie voor het opnieuw proberen van de uitvoering is ingeschakeld, omvat dit elke afzonderlijke fout binnen meerdere pogingen voor dezelfde bewerking. Dit kan worden gebruikt om tijdelijke problemen met uw infrastructuur te detecteren.
Optimistische gelijktijdigheidsfouten
(total-optimistic-concurrency-failures en optimistic-concurrency-failures-per-second)
Het aantal keren SaveChanges is mislukt vanwege een optimistische gelijktijdigheidsfout, omdat gegevens in het gegevensarchief zijn gewijzigd sinds uw code deze heeft geladen. Dit komt overeen met het feit dat een DbUpdateConcurrencyException wordt gegooid.
Vragen
(total-queries en queries-per-second)
Het aantal uitgevoerde query's.
Trefferfrequentie van de cache-query (%)
(compiled-query-cache-hit-rate)
De verhouding tussen querycachetreffers en mislukkingen. De eerste keer dat een bepaalde LINQ-query wordt uitgevoerd door EF Core (met uitzondering van parameters), moet deze worden gecompileerd in wat een relatief zwaar proces is. In een normale toepassing worden alle query's opnieuw gebruikt en moet de treffersnelheid van de querycache stabiel zijn op 100% na een initiële opwarmperiode. Als dit aantal minder dan 100% in de loop van de tijd is, kan er sprake zijn van verminderde prestaties vanwege herhaalde compilaties. Dit kan het gevolg zijn van het genereren van suboptimale dynamische query's.
Wijzigingen opslaan
(total-save-changes en save-changes-per-second)
Het aantal keren SaveChanges is aangeroepen. Houd er rekening mee dat SaveChanges meerdere wijzigingen in één batch worden opgeslagen, dus dit vertegenwoordigt niet noodzakelijkerwijs elke afzonderlijke update die op één entiteit wordt uitgevoerd.

Aanvullende bronnen