Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: .NET Framework
.NET
.NET Standard
Windows için Olay İzleme (ETW), hata ayıklama ve test amacıyla sürücü tanımlı olayları günlüğe kaydetmenizi sağlayan verimli, çekirdek düzeyinde bir izleme tesisidir. SqlClient, ETW olaylarının farklı bilgi düzeylerinde yakalanmasını destekler. Olay izlemelerini yakalamaya başlamak için istemci uygulamaları SqlClient'ın EventSource uygulamasındaki olayları dinlemelidir:
Microsoft.Data.SqlClient.EventSource
Geçerli uygulama aşağıdaki Olay Anahtar Sözcüklerini destekler:
| Anahtar sözcük adı | Değer | Description |
|---|---|---|
| ExecutionTrace | 1 | Komut yürütülmeden önce ve sonra Başlat/Durdur olaylarını kaydetmeyi etkinleştirir. |
| İz | 2 | Temel uygulama akış izleme olaylarını kaydetmeyi etkinleştirir. |
| Scope | 4 | Giriş ve çıkış olaylarını yakalamayı açar |
| NotificationTrace | 8 | İzleme olaylarını yakalamayı SqlNotification etkinleştirir. |
| BildirimKapsamı | 16 | Kapsam giriş ve çıkış olaylarının yakalanmasını SqlNotification etkinleştirir |
| PoolerTrace | 32 | Bağlantı havuzu izleme olaylarının yakalanmasını etkinleştirir. |
| PoolerScope | 64 | Bağlantı havuzu kapsam izleme olaylarının yakalanmasını etkinleştirir. |
| AdvancedTrace | 128 | Gelişmiş akış izleme olaylarını yakalamayı açar. |
| AdvancedTraceBin | 256 | Ek bilgilerle gelişmiş akış izleme olaylarını yakalamayı açar. |
| CorrelationTrace | 512 | Bağıntı akışı izleme olaylarını yakalamayı açar. |
| StateDump | 1024 | Durum dökümünün tamamını yakalamayı aktif eder SqlConnection |
| SNITrace | 2048 | Yönetilen Ağ uygulamasından akış izleme olaylarını yakalamayı açar (yalnızca .NET Core'da geçerlidir) |
| SNIScope | 4096 | Yönetilen Ağ uygulamasından kapsam olaylarını yakalamayı açar (yalnızca .NET Core'da geçerlidir) |
Example
Aşağıdaki örnek AdventureWorks örnek veritabanında bir veri işlemi için olay izlemeyi etkinleştirir ve olayları konsol penceresinde görüntüler.
using System;
using System.Diagnostics.Tracing;
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 SqlClientListener : EventListener
{
protected override void OnEventSourceCreated(EventSource eventSource)
{
// Only enable events from SqlClientEventSource.
if (eventSource.Name.Equals("Microsoft.Data.SqlClient.EventSource"))
{
// Use EventKeyWord 2 to capture basic application flow events.
// See the above table for all available keywords.
EnableEvents(eventSource, EventLevel.Informational, (EventKeywords)2);
}
}
// This callback runs whenever an event is written by SqlClientEventSource.
// Event data is accessed through the EventWrittenEventArgs parameter.
protected override void OnEventWritten(EventWrittenEventArgs eventData)
{
// Print event data.
Console.WriteLine(eventData.Payload[0]);
}
}
class Program
{
public static void Main()
{
// Create a new event listener.
using (SqlClientListener listener = new SqlClientListener())
{
string connectionString = "Data Source=localhost; " +
"Initial Catalog=AdventureWorks; Integrated Security=true";
// Open a connection to the AdventureWorks database.
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string sql = "SELECT * FROM Sales.Currency";
SqlCommand command = new SqlCommand(sql, connection);
// Perform a data operation on the server.
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
// Read the data.
}
reader.Close();
}
}
}
}
Yerel SNI'de olay izleme desteği
Microsoft.Data.SqlClient , v2.1 ile başlayan Microsoft.Data.SqlClient.SNI ve Microsoft.Data.SqlClient.SNI.runtime'da olay izleme desteği sağlar. Olaylar , Xperf ve PerfView araçları kullanılarak yerel DLL'lerden toplanabilir.
Microsoft.Data.SqlClient v3.0'dan başlayarak, olay toplama araçları kullanılarak istemci uygulamasında herhangi bir değişiklik yapılmadan olay izleme etkinleştirilebilir.
Microsoft.Data.SqlClient v2.1 sürümünde, olay izlemenin etkinleştirilmesi için olay kaynağı dinleyicisi ile EventCommand yapılandırılması gerekir.
EventCommand Yerel SNI için geçerli değerler şunlardır:
// Enables trace events:
EventSource.SendCommand(eventSource, (EventCommand)8192, null);
// Enables flow events:
EventSource.SendCommand(eventSource, (EventCommand)16384, null);
// Enables both trace and flow events:
EventSource.SendCommand(eventSource, (EventCommand)(8192 | 16384), null);
Aşağıdaki örnek, yerel SNI DLL'lerinde olay izlemeyi etkinleştirir.
// Native SNI tracing example
using System;
using System.Diagnostics.Tracing;
using Microsoft.Data.SqlClient;
public class SqlClientListener : EventListener
{
protected override void OnEventSourceCreated(EventSource eventSource)
{
if (eventSource.Name.Equals("Microsoft.Data.SqlClient.EventSource"))
{
// Enables both trace and flow events
EventSource.SendCommand(eventSource, (EventCommand)(8192 | 16384), null);
}
}
}
class Program
{
static string connectionString = @"Data Source = localhost; Initial Catalog = AdventureWorks;Integrated Security=true;";
static void Main(string[] args)
{
// Event source listener configuration is not required in v3.0 onwards.
using (SqlClientListener listener = new SqlClientListener())
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
}
}
}
İzlemeleri toplamak için Xperf kullanma
aşağıdaki komutu kullanarak izlemeyi başlatın.
xperf -start trace -f myTrace.etl -on *Microsoft.Data.SqlClient.EventSourceSQL Server'a bağlanmak için yerel SNI izleme örneğini çalıştırın.
Aşağıdaki komut satırını kullanarak izlemeyi durdurun.
xperf -stop trace1. Adımda belirtilen myTrace.etl dosyasını açmak için PerfView kullanın. SNI izleme günlüğü,
Microsoft.Data.SqlClient.EventSource/SNIScopeveMicrosoft.Data.SqlClient.EventSource/SNITraceolay adları ile bulunabilir.
İzlemeleri toplamak için PerfView kullanma
PerfView'u başlatın ve menü çubuğundan çalıştırın
Collect > Collect.İzleme dosyası adını, çıkış yolunu ve sağlayıcı adını yapılandırın.
Koleksiyonu başlatın.
SQL Server'a bağlanmak için yerel SNI izleme örneğini çalıştırın.
PerfView'dan koleksiyonu durdurun. 2. Adımdaki yapılandırmaya göre PerfViewData.etl dosyasının oluşturulması biraz zaman alır.
etlDosyayı PerfView'da açın. SNI izleme günlüğü,Microsoft.Data.SqlClient.EventSource/SNIScopeveMicrosoft.Data.SqlClient.EventSource/SNITraceolay adları ile bulunabilir.
İzlemeleri toplamak için dotnet-trace kullanma
Linux, macOS veya Windows'da izlemeleri yakalamak için dotnet-trace kullanılabilir. dotnet-trace aracı.NET uygulamalarına yönelik izlemeleri toplamak için kullanılır. dotnet-trace hakkında daha fazla bilgi için dotnet-trace performans analizi yardımcı programı Dotnet-trace tarafından oluşturulan izlemeler PerfView'da görüntülenebilir.
Henüz yüklü değilse istemci makinesine .NET SDK'sını yükleyin .
dotnet-trace komutunu çalıştırın. parametresi,
--providersMicrosoft.Data.SqlClient'dan gelen izlemeler için sağlayıcı adı ve anahtar sözcüklerinin belirtilmesi gerekir. Anahtar sözcükler seçeneği, olay anahtar sözcükleri tablosundaki anahtar sözcük değerlerinin onaltılık değere dönüştürülmüş bir toplamıdır. Uygulamanın başlangıcından itibaren ayrıntılı düzeydekiMyApplicationtüm olayları toplamak için anahtar sözcüklerin toplamı 8191 ve bu toplamın onaltılık olarak gösterimi1FFFşeklindedir. Ayrıntılı düzey bu komutta5tarafından belirtilir.dotnet-trace collect --providers Microsoft.Data.SqlClient.EventSource:1FFF:5 -- dotnet MyApplication.dllÇıktı şudur:
Provider Name Keywords Level Enabled By Microsoft.Data.SqlClient.EventSource 0x0000000000001FFF Verbose(5) --providers Launching: dotnet MyApplication.dll Process : /usr/lib/dotnet/dotnet Output File : /home/appuser/dotnet_20240927_102506.nettrace [00:00:00:00] Recording trace 0.00 (B) Press <Enter> or <Ctrl+C> to exit... Trace completed. Process exited with code '1'.Çalışan bir uygulamada bilgi düzeyindeki tüm olayları toplamak için önce uygulamanın işlem kimliğini bulun. Ardından işlemde dotnet-trace komutunu çalıştırın. Bilgi düzeyi tarafından
4belirtilir.dotnet-trace ps 8734 MyApplication /home/appuser/MyApplication/MyApplication dotnet-trace collect -–process-id 8734 --providers Microsoft.Data.SqlClient.EventSource:1FFF:4Uygulamayı ayrı ayrı çalıştırın ve sorunu yeniden oluşturmak için gerektiği kadar çalışmasına izin verin. Bu yüksek bir CPU sorunuysa, genellikle 5-10 saniye yeterlidir.
Provider Name Keywords Level Enabled By Microsoft.Data.SqlClient.EventSource 0x0000000000001FFF LogAlways(0) --providers Process : /usr/lib/dotnet/dotnet Output File : /home/appuser/dotnet_20240927_104154.nettrace [00:00:00:10] Recording trace 4.096 (KB) Press <Enter> or <Ctrl+C> to exit... Stopping the trace. This may take several minutes depending on the application being traced. Trace completed.İzleme dosyası adı
.nettraceile sona erer. Windows'da izlenmiyorsa, dosyayı bir Windows sistemine kopyalayın. perfView'da izleme dosyasını görüntüleyin.
Dış kaynaklar
Microsoft.Data.SqlClient çapraz platformunu izleme hakkında başka bir örnek kümesi için CSS SQL Ağ Araçları wiki'sine bakın.
Olay izleme hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın.
| Resource | Description |
|---|---|
| EventSource Sınıfı | ETW olayları oluşturmak için kullanılır. |
| EventListener Sınıfı | Olay kaynaklarından olayları etkinleştirmeye ve devre dışı bırakmaya yönelik yöntemler sağlar. |