Pelacakan data di SqlClient
Berlaku untuk: .NET Framework .NET .NET Standard
.NET menampilkan fungsionalitas pelacakan data bawaan yang didukung oleh Penyedia Data Microsoft SqlClient untuk protokol jaringan SQL Server dan SQL Server.
Pelacakan panggilan API akses data dapat membantu mendiagnosis masalah berikut:
Ketidakcocokan skema antara program klien dan database.
Ketidaktersediaan database atau masalah pustaka jaringan.
Kesalahan SQL akibat dikodekan secara permanen atau dihasilkan oleh aplikasi.
Logika pemrograman yang salah.
Masalah yang dihasilkan dari interaksi antara Penyedia Data Microsoft SqlClient untuk SQL Server dan komponen Anda sendiri.
Untuk mendukung berbagai teknologi pelacakan, penelusuran dapat diperluas, sehingga pengembang dapat melacak masalah di setiap tingkat tumpukan aplikasi. Penyedia Data Microsoft SqlClient untuk SQL Server memanfaatkan API pelacakan dan instrumentasi umum.
Untuk informasi selengkapnya tentang mengatur dan mengonfigurasi pelacakan terkelola di .NET, lihat Melacak Akses Data.
Mengakses informasi diagnostik dalam log peristiwa yang diperluas
Di Penyedia Data Microsoft SqlClient untuk SQL Server, Pelacakan Akses Data memudahkan untuk menghubungkan peristiwa klien dengan informasi diagnostik, seperti kegagalan koneksi, dari buffer cincin konektivitas server dan informasi performa aplikasi dalam log peristiwa yang diperluas. Untuk mengetahui informasi tentang cara membaca log kejadian yang diperluas, lihat Menampilkan Data Sesi Kejadian.
Untuk operasi koneksi, Penyedia Data Microsoft SqlClient untuk SQL Server akan mengirim ID koneksi klien. Jika koneksi gagal, Anda dapat mengakses buffer ring konektivitas (Pemecahan masalah konektivitas di SQL Server 2008 dengan Buffer Ring Konektivitas) serta menemukan bidang ClientConnectionID
dan mendapatkan informasi diagnostik tentang kegagalan koneksi. ID koneksi klien akan dicatat di buffer ring hanya jika terjadi kesalahan. Jika koneksi gagal sebelum mengirim paket pra-login, ID koneksi klien tidak akan dihasilkan. ID koneksi klien adalah GUID 16 byte. Anda juga dapat menemukan ID koneksi klien dalam output target kejadian yang diperluas, jika tindakan client_connection_id
ditambahkan ke kejadian dalam sesi kejadian yang diperluas. Anda dapat mengaktifkan pelacakan akses data dan menjalankan kembali perintah koneksi dan mengamati bidang ClientConnectionID
dalam jejak akses data, jika Anda memerlukan bantuan diagnostik driver klien lebih lanjut.
Anda bisa mendapatkan ID koneksi klien secara terprogram dengan menggunakan properti SqlConnection.ClientConnectionID
.
Catatan
Penyedia Data Microsoft SqlClient untuk SQL Server mendukung ID proses server sejak versi 2.1.0. Anda bisa mendapatkannya secara terprogram dengan menggunakan SqlConnection.ServerProcessId
properti .
ClientConnectionID
dan ServerProcessId
tersedia untuk SqlConnection objek yang berhasil membuat koneksi. Jika upaya koneksi gagal, ClientConnectionID
mungkin tersedia melalui SqlException.ToString
.
Penyedia Data Microsoft SqlClient untuk SQL Server juga mengirim ID aktivitas khusus utas. ID aktivitas ditangkap dalam sesi kejadian yang diperluas jika sesi dimulai dengan opsi TRACK_CAUSALITY diaktifkan. Untuk masalah performa dengan koneksi aktif, Anda bisa mendapatkan ID aktivitas dari jejak akses data klien (bidang ActivityID
) lalu menemukan ID aktivitas dalam output kejadian yang diperluas. ID aktivitas dalam peristiwa yang diperluas adalah GUID 16 byte (tidak sama dengan GUID untuk ID koneksi klien) ditambahkan dengan nomor urutan 4 byte. Nomor urut mewakili urutan permintaan dalam alur dan menunjukkan pemesanan relatif pernyataan batch dan RPC untuk alur. ActivityID
saat ini secara opsional dikirim untuk SQL pernyataan batch dan permintaan RPC saat pelacakan akses data diaktifkan dan bit ke-18 dalam kata konfigurasi pelacakan akses data diaktifkan.
Pernyataan SQL berikut adalah sampel yang menggunakan Transact-SQL untuk memulai sesi peristiwa yang diperluas yang akan disimpan dalam buffer cincin dan akan merekam ID aktivitas yang dikirim dari klien pada RPC dan operasi batch.
create event session MySession on server
add event connectivity_ring_buffer_recorded,
add event sql_statement_starting (action (client_connection_id)),
add event sql_statement_completed (action (client_connection_id)),
add event rpc_starting (action (client_connection_id)),
add event rpc_completed (action (client_connection_id))
add target ring_buffer with (track_causality=on)