Liczniki zdarzeń

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 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