Metryki w programie EF Core

Program Entity Framework Core (EF Core) uwidacznia ciągłe metryki liczbowe, które mogą zapewnić dobre wskazanie kondycji programu. Te metryki mogą być używane w następujących celach:

  • Śledzenie ogólnego obciążenia bazy danych w czasie rzeczywistym, gdy aplikacja jest uruchomiona
  • Uwidacznij problematyczne praktyki kodowania, które mogą prowadzić do obniżenia wydajności
  • Śledzenie i izolowanie nietypowego zachowania programu

Metryki

Metryki raportów platformy EF Core za pośrednictwem standardowego System.Diagnostics.Metrics interfejsu API. Microsoft.EntityFrameworkCore to nazwa miernika. Zaleca się przeczytanie dokumentacji platformy .NET dotyczącej metryk.

Uwaga

Ta funkcja jest wprowadzana w programie EF Core 9.0 (w wersji zapoznawczej). Zobacz liczniki zdarzeń poniżej , aby zapoznać się ze starszymi wersjami programu EF Core.

Metryki i ich znaczenie

Metryka: microsoft.entityframeworkcore.active_dbcontexts

Nazwisko Typ instrumentu Jednostka (UCUM) opis
microsoft.entityframeworkcore.active_dbcontexts ObservableUpDownCounter {dbcontext} Liczba aktualnie aktywnych DbContext wystąpień.

Dostępne począwszy od: Entity Framework Core 9.0.

Metryka: microsoft.entityframeworkcore.queries

Nazwisko Typ instrumentu Jednostka (UCUM) opis
microsoft.entityframeworkcore.queries ObservableCounter {query} Skumulowana liczba wykonanych zapytań.

Dostępne począwszy od: Entity Framework Core 9.0.

Metryka: microsoft.entityframeworkcore.savechanges

Nazwisko Typ instrumentu Jednostka (UCUM) opis
microsoft.entityframeworkcore.savechanges ObservableCounter {savechanges} Skumulowana liczba zapisanych zmian.

Dostępne począwszy od: Entity Framework Core 9.0.

Metryka: microsoft.entityframeworkcore.compiled_query_cache_hits

Nazwisko Typ instrumentu Jednostka (UCUM) opis
microsoft.entityframeworkcore.compiled_query_cache_hits ObservableCounter {hits} Skumulowana liczba trafień dla skompilowanej pamięci podręcznej zapytań.

Dostępne począwszy od: Entity Framework Core 9.0.

Metryka: microsoft.entityframeworkcore.compiled_query_cache_misses

Nazwisko Typ instrumentu Jednostka (UCUM) opis
microsoft.entityframeworkcore.compiled_query_cache_misses ObservableCounter {misses} Skumulowana liczba błędów dla skompilowanej pamięci podręcznej zapytań.

Dostępne począwszy od: Entity Framework Core 9.0.

Metryka: microsoft.entityframeworkcore.execution_strategy_operation_failures

Nazwisko Typ instrumentu Jednostka (UCUM) opis
microsoft.entityframeworkcore.execution_strategy_operation_failures ObservableCounter {failure} Skumulowana liczba operacji zakończonych niepowodzeniem wykonywana przez element IExecutionStrategy.

Dostępne począwszy od: Entity Framework Core 9.0.

Metryka: microsoft.entityframeworkcore.optimistic_concurrency_failures

Nazwisko Typ instrumentu Jednostka (UCUM) opis
microsoft.entityframeworkcore.optimistic_concurrency_failures ObservableCounter {failure} Skumulowana liczba optymistycznych niepowodzeń współbieżności.

Dostępne począwszy od: Entity Framework Core 9.0.

Liczniki zdarzeń (starsza wersja)

Metryki raportów platformy EF Core za pośrednictwem standardowej funkcji liczników zdarzeń platformy .NET; Zaleca się przeczytanie tego wpisu w blogu w celu szybkiego omówienia sposobu działania liczników.

Dołączanie do procesu przy użyciu liczników dotnet-counter

Narzędzie dotnet-counters może służyć do dołączania do uruchomionego procesu i regularnie raportować liczniki zdarzeń platformy EF Core. Nic specjalnego nie należy wykonywać w programie, aby te liczniki były dostępne.

Najpierw zainstaluj dotnet-counters narzędzie: dotnet tool install --global dotnet-counters.

Następnie znajdź identyfikator procesu (PID) procesu platformy .NET z uruchomioną aplikacją EF Core:

  1. Otwórz Menedżera zadań systemu Windows, klikając prawym przyciskiem myszy pasek zadań i wybierając pozycję "Menedżer zadań".
  2. Upewnij się, że opcja "Więcej szczegółów" jest zaznaczona w dolnej części okna.
  3. Na karcie Procesy kliknij prawym przyciskiem myszy kolumnę i upewnij się, że kolumna PID jest włączona.
  4. Znajdź aplikację na liście procesów i pobierz jej identyfikator procesu z kolumny PID.

W aplikacji .NET identyfikator procesu jest dostępny jako Process.GetCurrentProcess().Id. Może to być przydatne do drukowania identyfikatora PID podczas uruchamiania.

Na koniec uruchom polecenie dotnet-counters w następujący sposób:

dotnet counters monitor Microsoft.EntityFrameworkCore -p <PID>

dotnet-counters Zostanie teraz dołączony do uruchomionego procesu i rozpocznie raportowanie danych licznika ciągłego:

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

Liczniki i ich znaczenie

Nazwa licznika opis
Active DbContexts
(active-db-contexts)
Liczba aktywnych, niedysponowanych wystąpień DbContext obecnie w aplikacji. Jeśli ta liczba stale rośnie, może wystąpić wyciek, ponieważ wystąpienia dbContext nie są prawidłowo usuwane. Należy pamiętać, że jeśli włączono buforowanie kontekstów, ta liczba obejmuje wystąpienia DbContext w puli, które nie są obecnie używane.
Błędy operacji strategii wykonywania
(total-execution-strategy-operation-failures i execution-strategy-operation-failures-per-second)
Liczba nieudanych operacji bazy danych. Jeśli włączono strategię ponawiania próby wykonania, obejmuje to poszczególne niepowodzenia w ramach wielu prób w ramach tej samej operacji. Może to służyć do wykrywania przejściowych problemów z infrastrukturą.
Optymistyczne błędy współbieżności
(total-optimistic-concurrency-failures i optimistic-concurrency-failures-per-second)
Liczba niepomyślnych SaveChanges awarii z powodu optymistycznego błędu współbieżności, ponieważ dane w magazynie danych zostały zmienione od załadowania kodu. Odpowiada DbUpdateConcurrencyException to zgłaszaniu.
Kwerendy
(total-queries i queries-per-second)
Liczba wykonanych zapytań.
Szybkość trafień pamięci podręcznej zapytań (%)
(compiled-query-cache-hit-rate)
Współczynnik trafień pamięci podręcznej zapytań do chybień. Przy pierwszym wykonaniu danego zapytania LINQ przez program EF Core (z wyłączeniem parametrów), należy go skompilować w procesie stosunkowo ciężkim. W normalnej aplikacji wszystkie zapytania są ponownie używane, a szybkość trafień pamięci podręcznej zapytań powinna być stabilna na poziomie 100% po początkowym okresie rozgrzewki. Jeśli liczba ta jest mniejsza niż 100% w czasie, może wystąpić obniżona wydajność z powodu powtarzających się kompilacji, co może być wynikiem nieoptymalnego generowania zapytań dynamicznych.
SaveChanges
(total-save-changes i save-changes-per-second)
Liczba wywołań SaveChanges . Należy pamiętać, że SaveChanges zapisuje wiele zmian w jednej partii, więc niekoniecznie reprezentuje to każdą pojedynczą aktualizację wykonywaną w jednej jednostce.

Dodatkowe zasoby