Freigeben über


Metriken in EF Core

Entity Framework Core (EF Core) stellt fortlaufende numerische Metriken zur Verfügung, die einen guten Hinweis auf die Integrität Ihres Programms bieten können. Diese Metriken können für die folgenden Zwecke verwendet werden:

  • Nachverfolgen des allgemeinen Datenbankladevorgangs in Echtzeit während der Ausführung der Anwendung
  • Verfügbarmachen problematischer Codierungsmethoden, die zu beeinträchtigter Leistung führen können
  • Nachverfolgen und Isolieren von anomalem Programmverhalten

Metriken

EF Core meldet Metriken über die Standard-API System.Diagnostics.Metrics. Microsoft.EntityFrameworkCore ist der Name der Verbrauchseinheit. Es wird empfohlen, die .NET-Dokumentation zu Metriken zu lesen.

Hinweis

Dieses Feature wird in EF Core 9.0 (derzeit in der Vorschauphase) eingeführt. Informationen zu älteren Versionen von EF Core finden Sie unter „Ereigniszähler“ weiter unten.

Metriken und ihre Bedeutung

Metrik: microsoft.entityframeworkcore.active_dbcontexts

Name Instrument Typ Einheit (UCUM) Beschreibung
microsoft.entityframeworkcore.active_dbcontexts ObservableUpDownCounter {dbcontext} Anzahl der derzeit aktiven DbContext-Instanzen.

Verfügbar ab Entity Framework Core 9.0.

Metrik: microsoft.entityframeworkcore.queries

Name Instrument Typ Einheit (UCUM) Beschreibung
microsoft.entityframeworkcore.queries ObservableCounter {query} Kumulative Anzahl der ausgeführten Abfragen.

Verfügbar ab Entity Framework Core 9.0.

Metrik: microsoft.entityframeworkcore.savechanges

Name Instrument Typ Einheit (UCUM) Beschreibung
microsoft.entityframeworkcore.savechanges ObservableCounter {savechanges} Kumulierte Anzahl der gespeicherten Änderungen.

Verfügbar ab Entity Framework Core 9.0.

Metrik: microsoft.entityframeworkcore.compiled_query_cache_hit_rate

Name Instrument Typ Einheit (UCUM) Beschreibung
microsoft.entityframeworkcore.compiled_query_cache_hit_rate ObservableGauge % Trefferrate – seit letzter Beobachtung – für den kompilierten Abfragecache.

Verfügbar ab Entity Framework Core 9.0.

Metrik: microsoft.entityframeworkcore.execution_strategy_operation_failures

Name Instrument Typ Einheit (UCUM) Beschreibung
microsoft.entityframeworkcore.execution_strategy_operation_failures ObservableCounter {failure} Kumulative Anzahl fehlerhafter Vorgängen, die von IExecutionStrategy ausgeführt werden.

Verfügbar ab Entity Framework Core 9.0.

Metrik: microsoft.entityframeworkcore.optimistic_concurrency_failures

Name Instrument Typ Einheit (UCUM) Beschreibung
microsoft.entityframeworkcore.optimistic_concurrency_failures ObservableCounter {failure} Kumulative Anzahl von Fehlern der optimistischen Parallelität.

Verfügbar ab Entity Framework Core 9.0.

Ereignisindikatoren (Legacy)

EF Core meldet Metriken über das standardmäßige .NET-Ereigniszählerfeature. Es wird empfohlen, diesen Blogbeitrag zu lesen , um einen schnellen Überblick über die Funktionsweise von Zählern zu erhalten.

Anfügen an einen Prozess mithilfe von Dotnet-Zählern

Das Dotnet-Counter-Tool kann verwendet werden, um an einen laufenden Prozess anzufügen und EF Core-Ereigniszähler regelmäßig zu melden. Im Programm muss nichts besonderes getan werden, damit diese Zähler verfügbar sind.

Installieren Sie zunächst das dotnet-counters-Tool: dotnet tool install --global dotnet-counters.

Suchen Sie als Nächstes die Prozess-ID (PID) des .NET-Prozesses, der Ihre EF Core-Anwendung ausführt:

  1. Öffnen Sie den Windows Task-Manager, indem Sie mit der rechten Maustaste auf die Taskleiste klicken und „Task-Manager“ auswählen.
  2. Stellen Sie sicher, dass die Option „Weitere Details“ unten im Fenster ausgewählt ist.
  3. Klicken Sie auf der Registerkarte „Prozesse“ mit der rechten Maustaste auf eine Spalte, und stellen Sie sicher, dass die PID-Spalte aktiviert ist.
  4. Suchen Sie Ihre Anwendung in der Prozessliste, und rufen Sie die Prozess-ID aus der PID-Spalte ab.

Innerhalb Ihrer .NET-Anwendung ist die Prozess-ID als Process.GetCurrentProcess().Id verfügbar. Dies kann für das Drucken der PID beim Start hilfreich sein.

Starten Sie dotnet-counters schließlich wie folgt:

dotnet counters monitor Microsoft.EntityFrameworkCore -p <PID>

dotnet-counters wird nun an Ihren laufenden Prozess angefügt und die Berichterstellung fortlaufender Zählerdaten starten:

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

Zähler und ihre Bedeutung

Name des Leistungsindikators Beschreibung
Aktive DbContexts
(active-db-contexts)
Die Anzahl der aktiven, nicht freigegebenen DbContext-Instanzen, die sich derzeit in Ihrer Anwendung befinden. Wenn diese Zahl kontinuierlich wächst, haben Sie möglicherweise ein Leck, da DbContext-Instanzen nicht ordnungsgemäß freigegeben werden. Beachten Sie, dass bei aktivem Kontext-Pooling diese Zahl gepoolte DbContext-Instanzen enthält, die derzeit nicht verwendet werden.
Vorgangsfehler bei der Ausführungsstrategie
(total-execution-strategy-operation-failures und execution-strategy-operation-failures-per-second)
Die Häufigkeit, mit der ein Datenbankvorgang nicht ausgeführt werden konnte. Wenn eine Wiederholungsausführungsstrategie aktiviert ist, umfasst dies jeden einzelnen Fehler innerhalb mehrerer Versuche für denselben Vorgang. Dies kann verwendet werden, um vorübergehende Probleme mit Ihrer Infrastruktur zu erkennen.
Optimistische Nebenläufigkeitsfehler
(total-optimistic-concurrency-failures und optimistic-concurrency-failures-per-second)
Die Häufigkeit, mit der SaveChanges aufgrund eines optimistischen Nebenläufigkeitsfehlers fehlgeschlagen ist, da Daten im Datenspeicher seit dem Laden Ihres Codes geändert wurden. Dies entspricht dem Auslösen eines DbUpdateConcurrencyException.
Abfragen
(total-queries und queries-per-second)
Die Anzahl der ausgeführten Abfragen.
Trefferquote im Abfragecache (%)
(compiled-query-cache-hit-rate)
Das Verhältnis von Abfragecachetreffern zu Fehlern. Wenn eine bestimmte LINQ-Abfrage zum ersten Mal von EF Core ausgeführt wird (ohne Parameter), muss sie in einem relativ aufwändigen Prozess kompiliert werden. In einer normalen Anwendung werden alle Abfragen wiederverwendet, und die Trefferquote des Abfragecaches sollte nach einem anfänglichen Aufwärmphase bei 100 % stabil sein. Wenn diese Zahl im Laufe der Zeit unter 100 % liegt, kann es aufgrund wiederholter Kompilierungen zu Leistungseinbußen kommen, was auf eine suboptimale dynamische Abfragegenerierung zurückzuführen sein könnte.
SaveChanges
(total-save-changes und save-changes-per-second)
Die Häufigkeit, mit der SaveChanges aufgerufen wurde. Beachten Sie, dass SaveChanges mehrere Änderungen in einem einzelnen Batch speichert, sodass dies nicht notwendigerweise jede einzelne Aktualisierung darstellt, die für eine einzelne Entität durchgeführt wurde.

Zusätzliche Ressourcen