Sp_reset_connection'ın yürütülmesi uzun zaman almasının olası nedenleri nelerdir?


9

sp_reset_connectionSistem saklı yordamının neden SQL Server Profiler aracılığıyla görüntülendiği gibi birkaç milisaniyeden daha uzun sürmesi gerekir?

SQL Server Profiler kullanarak bir üretim sisteminden basit bir iz aldım ve sonra analiz etmek için SqlNexus kullandım. SqlNexus, sp_reset_connection öğesinin toplam izlemenin% 33'ü olan en yüksek kümülatif süreye sahip olduğunu belirtir. Gözlemlenen süre 0-7 saniye (12 ila 6.833.270 mikrosaniye) arasında değişir, ancak ortalama 0.956 saniyedir.

Birleştirilmiş bir bağlantı yeniden kullanıldığında sp_reset_connection çağrıldığını anlıyorum. Bunun yabancı izler nedeniyle olabileceğine dair bir öneri gördüm , ancak durum böyle görünmüyor.

Sunucunun sproc çağrıldığında ne yaptığını okudum ama bunlardan herhangi birinin bu durumda sorunlu olacağına inanmıyorum - kod açık işlem veya temizlenmesi gereken büyük geçici tablolar bırakmıyor.

Ayrıca /server/199974/sp-reset-connection-taking-a-long-time-to-run'a baktım ama yardımcı olmadı.

EDIT (2013-12-23): Her durumda, okuma ve yazma 0'dır ve CPU neredeyse her zaman 0'dır (her ikisi de 16ms'de sıfır olmayan CPU'nun yalnızca iki örneği).


Bu etkinlikte okuma ve yazma için ne tür değerler görüyorsunuz?
Martin Smith

Ne tür sorgular çalıştırdığınız hakkında daha fazla bilgi verebilir misiniz? Uzun veya karmaşık işlemler, XML işleme, geçici tablolar gibi özellikle ilginç ayrıntılar?
Edward Dortland

@Martin okur ve yazar 0'dır. Soruyu güncelledi. (Verilere hafta sonu erişemedi.)
Holistic Developer

@EdwardDortland sorguların çoğu açık işlemler veya geçici tablolar kullanmadan oldukça basit seçimler ve güncellemelerdir. Aslında, genellikle bu bağlantılar üzerinde yürütülen gerçek sorgular oldukça hızlı - sadece birkaç ms.
Holistic Developer

@HolisticDeveloper - Ben açık bir işlem bırakarak denedim ve orada sıfır olmayan okuma ve yazma görebiliyordu, o zaman böyle görünmüyor kabul ediyorum. Bu durum aşağı yukarı kalıcı mıdır? Ben uzun bir olaylar iz yakalama kaçardım eğer öyleyse RPC:Starting, RPC:Completedve kısa bir süre sonra spids bu süre içinde karşılaşıyorsanız türlerini beklemek ne olduğunu görmek için verileri üzerinden bakmak için türlerini bekleyin.
Martin Smith

Yanıtlar:


9

Sonunda daha ayrıntılı bir cevap yazmak için biraz zamanım oldu.

Genellikle basit bir prosedürün sp_reset_connectionçalışması uzun zaman alacak üç ana neden vardır .

  1. CPU kaynaklarını bekliyorsunuz
  2. Bir yerde bir kilitte engellendiniz (belki DML veya rakip bir işlemin sonucu olarak)
  3. Ağınız yavaş ve sonucu istemciye geri döndürmek uzun zaman alıyor

Reklam 1) CPU kaynaklarını bekliyorsanız, bu sinyal bekledikçe görünmelidir. Sorunun bu olup olmadığını nasıl teşhis edeceğinizle ilgili sorunuz hakkındaki yorumuma bakın.

Ad 2) Eğer bir kilit bekliyorsanız, bu en iyi teşhisinin iki anlık görüntüsünü karşılaştırarak teşhis edilir sys.dm_os_wait_stats. Bunun nasıl yapılacağı ile ilgili bu makaleye bakın:

LCK_ [Bir Şey] için uzun süre beklerseniz, sys.dm_tran_lockshangi nesnelerin kilitlendiğini izlemek için sorgulayın . Sizin durumunuzda, sizi engelleyen bir çeşit SCH- [Something]> kilitleri görmeyi beklerdim.

Reklam 3) İlk olarak OLEDB ve ASYNC_NETWORK_IO'yu aramak için ağ sorunlarını teşhis etmenin en kolay yolu 2. adımda bekler (ağ için uzun süre beklerseniz, bunlardan biri görünür). Bu beklemeler yüksekse, xperf -on latencygecikmeleri kontrol etmek için netmon veya wireshark gibi bir ağ izleme programı kullanın . Şebeke yavaş görünüyorsa, buna çağrı yapan uygulama sunucusunun geri dönüştürülen bağlantıya yeterince hızlı yanıt vermemesi de neden olabilir.


Sorunun tekrarlandığını görmedim, bu nedenle verilen yanıtı bu noktada daha fazla tanı koymak için kullanamıyorum. Ancak, bir SQL Server performans uzmanı olarak itibarınıza dayalı olarak cevabı kabul ediyorum.
Holistic Developer

2

Bu sorunla ilgili olabilecek bir hata için bir KB makalesiyle karşılaştım . In Düzeltme: Performans sorunları SQL Server veritabanı kilit aktivite artar ortaya (KB 2926217), semptomların biri olduğunu tarif sp_reset_connectiontamamlanması uzun zaman alabilir. Düzeltme aşağıdaki güncelleştirmelere dahil edilir:

  • SQL Server 2008 SP3 için Toplu Güncelleştirme 17
  • SQL Server 2008 R2 SP2 için Toplu Güncelleştirme 13
  • SQL Server 2012 SP1 için Toplu Güncelleştirme 9
  • SQL Server 2014 için Toplu Güncelleştirme 1

Bu davranışı gözlemlediğim sunucu, Toplu Güncelleştirme 5 ile SQL Server 2008 SP3 çalıştırıyordu, bu nedenle bu hatayı yaşıyordu. Toplu güncellemeyi henüz denemedim (sorun her zaman tekrarlamıyor), bu yüzden düzeltip düzeltmeyeceğini doğrulayamıyorum. Ancak, herkesin aynı semptomlara sahip olması durumunda bilgi vermek istedim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.