Penghitung Peristiwa

Entity Framework Core (EF Core) memaparkan metrik numerik berkelanjutan yang dapat memberikan indikasi kesehatan program Anda yang baik. Metrik ini dapat digunakan untuk tujuan berikut:

  • Lacak beban database umum secara realtime saat aplikasi berjalan
  • Mengekspos praktik pengkodean bermasalah yang dapat menyebabkan penurunan performa
  • Melacak dan mengisolasi perilaku program anomali

EF Core melaporkan metrik melalui fitur penghitung peristiwa .NET standar; disarankan untuk membaca posting blog ini untuk gambaran umum singkat tentang cara kerja penghitung.

Melampirkan ke proses menggunakan penghitung dotnet

Alat penghitung dotnet dapat digunakan untuk melampirkan ke proses yang sedang berjalan dan melaporkan penghitung peristiwa EF Core secara teratur; tidak ada yang perlu dilakukan khusus dalam program agar penghitung ini tersedia.

Pertama, instal dotnet-counters alat: dotnet tool install --global dotnet-counters.

Selanjutnya, temukan ID proses (PID) dari proses .NET yang menjalankan aplikasi EF Core Anda:

  1. Buka Windows Task Manager dengan mengklik kanan pada bilah tugas dan pilih "Task Manager".
  2. Pastikan bahwa opsi "Detail selengkapnya" dipilih di bagian bawah jendela.
  3. Di tab Proses, klik kanan kolom dan pastikan kolom PID diaktifkan.
  4. Temukan aplikasi Anda dalam daftar proses, dan dapatkan ID prosesnya dari kolom PID.

Di dalam aplikasi .NET Anda, ID proses tersedia sebagai Process.GetCurrentProcess().Id; ini dapat berguna untuk mencetak PID saat startup.

Terakhir, luncurkan dotnet-counters sebagai berikut:

dotnet counters monitor Microsoft.EntityFrameworkCore -p <PID>

dotnet-counters sekarang akan melampirkan ke proses yang sedang berjalan dan mulai melaporkan data penghitung berkelanjutan:

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

Penghitung dan maknanya

Nama penghitung Deskripsi
Active DbContexts
(active-db-contexts)
Jumlah instans DbContext aktif yang tidak diposisikan saat ini di aplikasi Anda. Jika jumlah ini terus bertambah, Anda mungkin memiliki kebocoran karena instans DbContext tidak dibuang dengan benar. Perhatikan bahwa jika pengumpulan konteks diaktifkan, nomor ini mencakup instans DbContext yang dikumpulkan yang saat ini tidak digunakan.
Kegagalan Operasi Strategi Eksekusi
(total-execution-strategy-operation-failures dan execution-strategy-operation-failures-per-second)
Berapa kali operasi database gagal dijalankan. Jika strategi eksekusi coba lagi diaktifkan, ini termasuk setiap kegagalan individu dalam beberapa upaya pada operasi yang sama. Ini dapat digunakan untuk mendeteksi masalah sementara dengan infrastruktur Anda.
Kegagalan Konkurensi Optimis
(total-optimistic-concurrency-failures dan optimistic-concurrency-failures-per-second)
Frekuensi SaveChanges gagal karena kesalahan konkurensi optimis, karena data di penyimpanan data diubah sejak kode Anda memuatnya. Ini sesuai dengan yang DbUpdateConcurrencyException dilemparkan.
Pertanyaan
(total-queries dan queries-per-second)
Jumlah kueri yang dijalankan.
Laju Hit Singgahan Kueri (%)
(compiled-query-cache-hit-rate)
Rasio hit cache kueri meleset. Pertama kali kueri LINQ tertentu dijalankan oleh EF Core (tidak termasuk parameter), kueri harus dikompilasi dalam apa yang merupakan proses yang relatif berat. Dalam aplikasi normal, semua kueri digunakan kembali, dan tingkat hit cache kueri harus stabil pada 100% setelah periode pemanasan awal. Jika jumlah ini kurang dari 100% dari waktu ke waktu, Anda mungkin mengalami penurunan perf karena kompilasi berulang, yang bisa menjadi hasil dari pembuatan kueri dinamis suboptimal.
SaveChanges
(total-save-changes dan save-changes-per-second)
Berapa kali SaveChanges telah dipanggil. Perhatikan bahwa SaveChanges menyimpan beberapa perubahan dalam satu batch, sehingga ini tidak selalu mewakili setiap pembaruan individu yang dilakukan pada satu entitas.

Sumber Daya Tambahan: