Mengapa sp_reset_connection
prosedur yang disimpan sistem membutuhkan waktu lebih dari beberapa milidetik untuk dijalankan, seperti yang dilihat melalui SQL Server Profiler?
Saya mengambil jejak sederhana dari sistem produksi menggunakan SQL Server Profiler dan kemudian menggunakan SqlNexus untuk menganalisisnya. SqlNexus menunjukkan bahwa sp_reset_connection memiliki durasi kumulatif tertinggi - 33% dari keseluruhan jejak. Durasi yang diamati berkisar antara 0-7 detik (12 hingga 6.833.270 mikrodetik) tetapi rata-rata pada 0,956s.
Saya mengerti bahwa sp_reset_connection dipanggil ketika koneksi yang dikumpulkan digunakan kembali. Saya telah melihat saran bahwa ini bisa terjadi karena jejak yang asing , tetapi sepertinya tidak demikian.
Saya telah membaca apa yang dilakukan server ketika sproc dipanggil tetapi saya tidak percaya ada yang bermasalah dalam kasus ini - kode tidak meninggalkan transaksi terbuka atau tabel sementara besar yang perlu dibersihkan.
Saya juga melihat /server/199974/sp-reset-connection-taking-a-long-time-to-run tetapi itu tidak membantu.
EDIT (2013-12-23): Dalam semua kasus, baca dan tulis adalah 0 dan CPU hampir selalu 0 (hanya dua contoh CPU non-nol, keduanya pada 16ms).
sumber
RPC:Starting
,RPC:Completed
dan menunggu jenis untuk periode singkat kemudian melihat melalui data untuk melihat jenis menunggu apa yang dihadapi spid selama waktu itu.Jawaban:
Akhirnya sempat menulis jawaban yang lebih detail.
Biasanya ada tiga alasan utama prosedur sederhana seperti
sp_reset_connection
akan membutuhkan waktu lama untuk dijalankan.Iklan 1) Jika Anda menunggu sumber daya CPU, ini akan muncul sebagai menunggu sinyal. Silakan lihat komentar saya pada pertanyaan Anda tentang cara mendiagnosis jika ini masalahnya
Iklan 2) Jika Anda menunggu kunci, ini paling baik didiagnosis dengan membandingkan dua foto
sys.dm_os_wait_stats
. Lihat artikel ini tentang cara melakukan ini:Jika Anda melihat lama menunggu LCK_ [Sesuatu], kueri
sys.dm_tran_locks
untuk melacak objek mana yang sedang dikunci. Dalam kasus Anda, saya berharap melihat beberapa bentuk kunci SCH- [Sesuatu]> yang menghalangi Anda.Iklan 3) Cara termudah untuk mendiagnosis masalah jaringan untuk pertama-tama mencari OLEDB dan ASYNC_NETWORK_IO menunggu di langkah 2 (jika Anda menunggu lama untuk jaringan, salah satunya muncul). Jika menunggu itu tinggi, gunakan
xperf -on latency
atau program pemantauan jaringan seperti netmon atau wireshark untuk memeriksa latensi Anda. Jika jaringan terlihat lambat, ini juga bisa disebabkan oleh server aplikasi panggilan tidak merespon cukup cepat untuk koneksi yang didaur ulang.sumber
Saya baru saja menemukan artikel KB untuk bug yang mungkin terkait dengan masalah ini. Di FIX: Masalah kinerja terjadi ketika aktivitas kunci basis data meningkat di SQL Server (KB 2926217), salah satu gejala yang dijelaskan adalah yang
sp_reset_connection
mungkin membutuhkan waktu lama untuk menyelesaikan. Perbaikan terbaru termasuk dalam pembaruan berikut:Server tempat saya mengamati perilaku ini menjalankan SQL Server 2008 SP3 dengan Pembaruan Kumulatif 5, jadi mungkin saja ia mengalami bug ini. Saya belum mencoba pembaruan kumulatif (masalah tidak berulang setiap saat) jadi saya tidak dapat memverifikasi apakah akan memperbaikinya atau tidak. Namun, saya ingin memberikan info kalau-kalau ada yang memiliki gejala yang sama.
sumber