EF Core'daki ölçümler
Entity Framework Core (EF Core), sürekli sayısal ölçümleri kullanıma sunar ve bu da programınızın durumunun iyi bir göstergesi olabilir. Bu ölçümler aşağıdaki amaçlar için kullanılabilir:
- Uygulama çalışırken genel veritabanı yükünü gerçek zamanlı olarak izleme
- Performansın düşmesine neden olabilecek sorunlu kodlama uygulamalarını kullanıma sunma
- Anormal program davranışını izleme ve yalıtma
Ölçümler
EF Core, standart System.Diagnostics.Metrics API aracılığıyla ölçümleri raporlar. Microsoft.EntityFrameworkCore
ölçümün adıdır. Ölçümlerle ilgili .NET belgelerinin okunmasını öneririz.
Not
Bu özellik EF Core 9.0'da kullanıma sunulmuştur (önizlemede). EF Core'un eski sürümleri için aşağıdaki olay sayaçlarına bakın.
Ölçümler ve anlamları
microsoft.entityframeworkcore.active_dbcontexts
microsoft.entityframeworkcore.queries
microsoft.entityframeworkcore.savechanges
microsoft.entityframeworkcore.compiled_query_cache_hits
microsoft.entityframeworkcore.compiled_query_cache_misses
microsoft.entityframeworkcore.execution_strategy_operation_failures
microsoft.entityframeworkcore.optimistic_concurrency_failures
Metrik: microsoft.entityframeworkcore.active_dbcontexts
Veri Akışı Adı | İzleme Türü | Birim (UCUM) | Açıklama |
---|---|---|---|
microsoft.entityframeworkcore.active_dbcontexts |
ObservableUpDownCounter | {dbcontext} |
Şu anda etkin DbContext olan örneklerin sayısı. |
Şu şekilde kullanılabilir: Entity Framework Core 9.0.
Metrik: microsoft.entityframeworkcore.queries
Veri Akışı Adı | İzleme Türü | Birim (UCUM) | Açıklama |
---|---|---|---|
microsoft.entityframeworkcore.queries |
ObservableCounter | {query} |
Yürütülen sorguların birikmeli sayısı. |
Şu şekilde kullanılabilir: Entity Framework Core 9.0.
Metrik: microsoft.entityframeworkcore.savechanges
Veri Akışı Adı | İzleme Türü | Birim (UCUM) | Açıklama |
---|---|---|---|
microsoft.entityframeworkcore.savechanges |
ObservableCounter | {savechanges} |
Kaydedilen değişikliklerin birikmeli sayısı. |
Şu şekilde kullanılabilir: Entity Framework Core 9.0.
Metrik: microsoft.entityframeworkcore.compiled_query_cache_hits
Veri Akışı Adı | İzleme Türü | Birim (UCUM) | Açıklama |
---|---|---|---|
microsoft.entityframeworkcore.compiled_query_cache_hits |
ObservableCounter | {hits} |
Derlenen sorgu önbelleği için isabetlerin toplam sayısı. |
Şu şekilde kullanılabilir: Entity Framework Core 9.0.
Metrik: microsoft.entityframeworkcore.compiled_query_cache_misses
Veri Akışı Adı | İzleme Türü | Birim (UCUM) | Açıklama |
---|---|---|---|
microsoft.entityframeworkcore.compiled_query_cache_misses |
ObservableCounter | {misses} |
Derlenen sorgu önbelleği için birikmeli eksik sayısı. |
Şu şekilde kullanılabilir: Entity Framework Core 9.0.
Metrik: microsoft.entityframeworkcore.execution_strategy_operation_failures
Veri Akışı Adı | İzleme Türü | Birim (UCUM) | Açıklama |
---|---|---|---|
microsoft.entityframeworkcore.execution_strategy_operation_failures |
ObservableCounter | {failure} |
tarafından yürütülen başarısız işlemin birikmeli IExecutionStrategy sayısı. |
Şu şekilde kullanılabilir: Entity Framework Core 9.0.
Metrik: microsoft.entityframeworkcore.optimistic_concurrency_failures
Veri Akışı Adı | İzleme Türü | Birim (UCUM) | Açıklama |
---|---|---|---|
microsoft.entityframeworkcore.optimistic_concurrency_failures |
ObservableCounter | {failure} |
İyimser eşzamanlılık hatalarının birikmeli sayısı. |
Şu şekilde kullanılabilir: Entity Framework Core 9.0.
Olay Sayaçları (eski)
EF Core, standart .NET olay sayaçları özelliği aracılığıyla ölçümleri raporlar; Sayaçların nasıl çalıştığına hızlı bir genel bakış için bu blog gönderisini okumanızı öneririz.
dotnet-counters kullanarak işleme ekleme
Dotnet-counters aracı, çalışan bir işleme eklemek ve EF Core olay sayaçlarını düzenli olarak raporlamak için kullanılabilir; bu sayaçların kullanılabilir olması için programda özel bir işlem yapılması gerekmez.
İlk olarak, aracını yükleyin dotnet-counters
: dotnet tool install --global dotnet-counters
.
Ardından, EF Core uygulamanızı çalıştıran .NET işleminin işlem kimliğini (PID) bulun:
- Görev çubuğuna sağ tıklayıp "Görev Yöneticisi" seçeneğini belirleyerek Windows Görev Yöneticisi'ni açın.
- Pencerenin en altında "Diğer ayrıntılar" seçeneğinin belirlendiğinden emin olun.
- İşlemler sekmesinde bir sütuna sağ tıklayın ve PID sütununun etkinleştirildiğinden emin olun.
- İşlem listesinde uygulamanızı bulun ve PID sütunundan işlem kimliğini alın.
.NET uygulamanızın içinde işlem kimliği olarak Process.GetCurrentProcess().Id
kullanılabilir; bu, başlangıçta PID'yi yazdırmak için yararlı olabilir.
Son olarak, aşağıdaki gibi başlatın dotnet-counters
:
dotnet counters monitor Microsoft.EntityFrameworkCore -p <PID>
dotnet-counters
artık çalışan işleminize eklenir ve sürekli sayaç verilerini raporlamaya başlar:
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
Sayaçlar ve anlamları
Sayaç adı | Açıklama |
---|---|
Etkin DbContexts ( active-db-contexts ) |
Şu anda uygulamanızda bulunan etkin, dağıtılmamış DbContext örneklerinin sayısı. Bu sayı sürekli artarsa, DbContext örnekleri düzgün şekilde atılmadığından bir sızıntı olabilir. Bağlam havuzu etkinleştirilmişse, bu numaranın şu anda kullanımda olmayan havuza alınmış DbContext örneklerini içerdiğini unutmayın. |
Yürütme Stratejisi İşlem Hataları ( total-execution-strategy-operation-failures ve execution-strategy-operation-failures-per-second ) |
Veritabanı işleminin yürütülemediği süre. Yeniden deneme yürütme stratejisi etkinleştirilirse, aynı işlemde birden çok denemedeki tek tek hataların her biri buna dahildir. Bu, altyapınızla ilgili geçici sorunları algılamak için kullanılabilir. |
İyimser Eşzamanlılık Hataları ( total-optimistic-concurrency-failures ve optimistic-concurrency-failures-per-second ) |
İyimser eşzamanlılık hatası nedeniyle başarısız olan süre sayısıdır SaveChanges , çünkü veri deposundaki veriler kodunuz yüklendikten sonra değiştirildi. Bu, atılan bir DbUpdateConcurrencyException varya karşılık gelir. |
Sorgu ( total-queries ve queries-per-second ) |
Yürütülen sorgu sayısı. |
Sorgu Önbelleği İsabet Oranı (%) ( compiled-query-cache-hit-rate ) |
Sorgu önbelleği isabetlerinin kaçırılma oranı. Belirli bir LINQ sorgusu EF Core tarafından ilk kez yürütülür (parametreler hariç), nispeten ağır bir işlemde derlenmelidir. Normal bir uygulamada tüm sorgular yeniden kullanılır ve sorgu önbelleği isabet oranı ilk ısınma döneminden sonra %100 kararlı olmalıdır. Bu sayı zaman içinde %100'den azsa, yinelenen derlemeler nedeniyle performansın düşmesiyle karşılaşabilirsiniz ve bu da en iyi olmayan dinamik sorgu oluşturmanın bir sonucu olabilir. |
SaveChanges ( total-save-changes ve save-changes-per-second ) |
Çağrılma sayısı SaveChanges . SaveChanges Birden çok değişikliği tek bir toplu işte kaydettiğinize dikkat edin, bu nedenle tek bir varlık üzerinde yapılan her bir güncelleştirmeyi temsil etmemesi gerekir. |