Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: .NET
.NET Standard
Penting
Penghitung peristiwa tersedia saat menargetkan .NET Core 3.1 dan yang lebih tinggi atau .NET Standard 2.1 dan yang lebih tinggi. Fitur ini tersedia dimulai dengan Microsoft.Data.SqlClientversi 3.0.0.
Anda dapat menggunakan Microsoft.Data.SqlClient penghitung peristiwa untuk memantau status aplikasi Anda dan sumber daya koneksi yang digunakannya. Penghitung peristiwa dapat dipantau oleh .NET CLI global tools dan perfView, atau dapat diakses secara terprogram menggunakan kelas EventListener dalam namespace System.Diagnostics.Tracing.
Penghitung event yang tersedia
Saat ini ada 16 penghitung peristiwa berbeda yang tersedia untuk Microsoft.Data.SqlClient seperti yang dijelaskan dalam tabel berikut:
| Nama | Nama tampilan | Deskripsi |
|---|---|---|
| active-hard-connections | Koneksi aktif aktual yang saat ini dibuat ke server | Jumlah koneksi yang saat ini terbuka untuk server database. |
| menghubungkan secara langsung | Laju koneksi aktual ke server | Jumlah koneksi per detik yang sedang dibuka ke server database. |
| pemutusan paksa | Tingkat pemutusan aktual dari server | Jumlah pemutusan sambungan per detik yang sedang dibuat ke server database. |
| active-soft-connects | Koneksi aktif yang diambil dari kumpulan koneksi | Jumlah koneksi yang sudah terbuka yang digunakan dari kumpulan koneksi. |
| soft-connects | Laju koneksi yang diambil dari kumpulan koneksi | Jumlah koneksi per detik yang sedang digunakan dari kumpulan koneksi. |
| pemutusan koneksi lunak | Laju koneksi yang dikembalikan ke kumpulan koneksi | Jumlah koneksi per detik yang dikembalikan ke kumpulan koneksi. |
| number-of-non-pooled-connections | Jumlah koneksi yang tidak menggunakan pengumpulan koneksi | Jumlah koneksi aktif yang tidak dikumpulkan. |
| jumlah koneksi dalam pool | Jumlah koneksi yang dikelola oleh kumpulan koneksi | Jumlah koneksi aktif yang dikelola oleh infrastruktur pengumpulan koneksi. |
| number-of-active-connection-pool-groups | Jumlah string koneksi unik aktif | Jumlah grup kumpulan koneksi unik yang aktif. Penghitung ini dikendalikan oleh jumlah string koneksi unik yang ditemukan di AppDomain. |
| number-of-inactive-connection-pool-groups | Jumlah string koneksi unik yang menunggu pemangkasan | Jumlah grup kumpulan koneksi unik yang ditandai untuk pemangkasan. Penghitung ini dikendalikan oleh jumlah string koneksi unik yang ditemukan di AppDomain. |
| number-of-active-connection-pools | Jumlah kumpulan koneksi aktif | Jumlah total kumpulan koneksi. |
| number-of-inactive-connection-pools | Jumlah kumpulan koneksi yang tidak aktif | Jumlah kumpulan koneksi tidak aktif yang tidak mengalami aktivitas apa pun baru-baru ini dan sedang menunggu untuk dihapus. |
| number-of-active-connections | Jumlah koneksi aktif | Jumlah koneksi aktif yang saat ini sedang digunakan. |
| jumlah koneksi gratis | Jumlah koneksi siap di kumpulan koneksi | Jumlah koneksi terbuka yang tersedia untuk digunakan dalam kumpulan koneksi. |
| number-of-stasis-connections | Jumlah koneksi yang saat ini menunggu untuk siap | Jumlah koneksi yang saat ini menunggu penyelesaian tindakan dan yang tidak tersedia untuk digunakan oleh aplikasi. |
| jumlah koneksi yang diklaim kembali | Jumlah koneksi yang dipulihkan oleh GC | Jumlah koneksi yang telah direklamasi melalui pengumpulan sampah di mana Close atau Dispose tidak dipanggil oleh aplikasi.
Catatan Tidak secara eksplisit menutup atau membuang koneksi menyakiti performa. |
Ambil nilai penghitung kejadian
Ada dua cara utama untuk menggunakan EventCounters, yaitu secara in-proc atau out-of-proc. Untuk informasi selengkapnya, lihat Menggunakan EventCounters.
Mengonsumsi out-of-proc
Di Windows, Anda dapat menggunakan PerfView dan Xperf untuk mengumpulkan data penghitung peristiwa. Untuk informasi selengkapnya, lihat Mengaktifkan pelacakan peristiwa di SqlClient. Anda dapat menggunakan dotnet-counters dan dotnet-trace, yang merupakan alat .NET lintas platform untuk memantau dan mengumpulkan data penghitung peristiwa.
Contoh di luar proc
Perintah berikut menjalankan dan mengumpulkan nilai penghitung peristiwa SqlClient sekali setiap detik. Mengganti EventCounterIntervalSec=1 dengan nilai yang lebih tinggi memungkinkan pengumpulan jejak yang lebih kecil dengan granularitas yang lebih sedikit dalam data penghitung.
PerfView /onlyProviders=*Microsoft.Data.SqlClient.EventSource:EventCounterIntervalSec=1 run "<application-Path>"
Perintah berikut mengumpulkan nilai penghitung peristiwa SqlClient sekali setiap detik.
dotnet-trace collect --process-id <pid> --providers Microsoft.Data.SqlClient.EventSource:0:1:EventCounterIntervalSec=1
Perintah berikut memantau nilai penghitung peristiwa SqlClient setiap tiga detik sekali.
dotnet-counters monitor --counters Microsoft.Data.SqlClient.EventSource -p <process-id> --refresh-interval 3
Perintah berikut memantau nilai penghitung peristiwa SqlClient yang dipilih setiap detik sekali.
dotnet-counters monitor --counters Microsoft.Data.SqlClient.EventSource[hard-connects,hard-disconnects] -p <process-id>
Menggunakan in-proc
Anda dapat mengakses nilai penghitung melalui API EventListener.
EventListener adalah mekanisme in-proc untuk menerima peristiwa apa pun yang dihasilkan oleh instans EventSource dalam aplikasi Anda. Untuk informasi selengkapnya, lihat EventListener.
Contoh dalam proc
Kode sampel berikut menangkap peristiwa Microsoft.Data.SqlClient.EventSource menggunakan EventCounterIntervalSec=1. Ini menulis nama penghitung dan nilainya Mean pada setiap pembaruan penghitung peristiwa.
Catatan
Anda harus menentukan nilai properti EventCounterIntervalSec saat mengaktifkan kejadian ini.
using System;
using System.Collections.Generic;
using System.Diagnostics.Tracing;
using System.Linq;
using Microsoft.Data.SqlClient;
// This listener class will listen for events from the SqlClientEventSource class.
// SqlClientEventSource is an implementation of the EventSource class which gives
// it the ability to create events.
public class EventCounterListener : EventListener
{
protected override void OnEventSourceCreated(EventSource eventSource)
{
// Only enable events from SqlClientEventSource.
if (eventSource.Name.Equals("Microsoft.Data.SqlClient.EventSource"))
{
var options = new Dictionary<string, string>();
// define time interval 1 second
// without defining this parameter event counters will not enabled
options.Add("EventCounterIntervalSec", "1");
// enable for the None keyword
EnableEvents(eventSource, EventLevel.Informational, EventKeywords.None, options);
}
}
// This callback runs whenever an event is written by SqlClientEventSource.
// Event data is accessed through the EventWrittenEventArgs parameter.
protected override void OnEventWritten(EventWrittenEventArgs eventData)
{
if (eventData.Payload.FirstOrDefault(p => p is IDictionary<string, object> x && x.ContainsKey("Name")) is IDictionary<string, object> counters)
{
if (counters.TryGetValue("DisplayName", out object name) && name is string cntName
&& counters.TryGetValue("Mean", out object value) && value is double cntValue)
{
// print event counter's name and mean value
Console.WriteLine($"{cntName}\t\t{cntValue}");
}
}
}
}
class Program
{
static void Main(string[] args)
{
// Create a new event listener
using (var listener = new EventCounterListener())
{
string connectionString = "Data Source=localhost; Integrated Security=true";
for (int i = 0; i < 50; i++)
{
// Open a connection
SqlConnection cnn = new SqlConnection(connectionString);
cnn.Open();
// wait for sampling interval happens
System.Threading.Thread.Sleep(500);
}
}
}
}
Actual active connections currently made to servers 0
Active connections retrieved from the connection pool 26
Number of connections not using connection pooling 0
Number of connections managed by the connection pool 26
Number of active unique connection strings 1
Number of unique connection strings waiting for pruning 0
Number of active connection pools 1
Number of inactive connection pools 0
Number of active connections 26
Number of ready connections in the connection pool 0
Number of connections currently waiting to be ready 0
...