Warum sp_reset_connection
dauert die Ausführung der gespeicherten Systemprozedur aus Sicht von SQL Server Profiler länger als einige Millisekunden?
Ich habe mit SQL Server Profiler einen einfachen Trace von einem Produktionssystem genommen und ihn dann mit SqlNexus analysiert. SqlNexus gibt an, dass sp_reset_connection die höchste kumulative Dauer hat - 33% der gesamten Ablaufverfolgung. Die beobachtete Dauer reicht von 0 bis 7 Sekunden (12 bis 6.833.270 Mikrosekunden), liegt jedoch im Durchschnitt bei 0,956 Sekunden.
Ich verstehe, dass sp_reset_connection aufgerufen wird, wenn eine gepoolte Verbindung wiederverwendet wird. Ich habe einen Vorschlag gesehen, dass dies aufgrund von Fremdspuren geschehen kann , aber das scheint nicht der Fall zu sein.
Ich habe gelesen, was der Server tut, wenn der Sproc aufgerufen wird, aber ich glaube nicht, dass einer von diesen in diesem Fall problematisch wäre - der Code hinterlässt keine offenen Transaktionen oder riesigen temporären Tabellen, die bereinigt werden müssten.
Ich habe mir auch /server/199974/sp-reset-connection-taking-a-long-time-to-run angesehen, aber es war nicht hilfreich.
BEARBEITEN (23.12.2013): In allen Fällen sind Lese- und Schreibvorgänge 0 und die CPU fast immer 0 (nur zwei Instanzen einer CPU ungleich Null, beide bei 16 ms).
quelle
RPC:Starting
,RPC:Completed
und Typen warten für eine kurze Zeit dann die Daten durchsehen , um zu sehen , welche Arten warten die spids während dieser Zeit begegnen.Antworten:
Endlich etwas Zeit, um eine detailliertere Antwort zu schreiben.
Es gibt normalerweise drei Hauptgründe, warum die Ausführung eines einfachen Verfahrens
sp_reset_connection
lange dauert.Anzeige 1) Wenn Sie auf CPU-Ressourcen warten, sollte dies als Signalwartezeit angezeigt werden. Bitte lesen Sie meinen Kommentar zu Ihrer Frage, wie Sie diagnostizieren können, ob dies das Problem ist
Anzeige 2) Wenn Sie auf eine Sperre warten, wird dies am besten durch Vergleichen von zwei Schnappschüssen von diagnostiziert
sys.dm_os_wait_stats
. In diesem Artikel erfahren Sie, wie das geht:Wenn Sie lange auf LCK_ [Something] warten, fragen Sie
sys.dm_tran_locks
ab, welche Objekte gesperrt werden. In Ihrem Fall würde ich erwarten, dass irgendeine Form von SCH- [Something]> -Sperren Sie blockiert.Anzeige 3) Der einfachste Weg, Netzwerkprobleme zu diagnostizieren, um zuerst nach OLEDB und ASYNC_NETWORK_IO zu suchen, wartet in Schritt 2 (wenn Sie lange auf das Netzwerk warten, wird eines davon angezeigt). Wenn diese Wartezeiten hoch sind, verwenden Sie
xperf -on latency
ein Netzwerküberwachungsprogramm wie Netmon oder Wireshark, um Ihre Latenzen zu überprüfen. Wenn das Netzwerk langsam aussieht, kann dies auch daran liegen, dass der aufrufende Anwendungsserver nicht schnell genug auf die wiederverwertete Verbindung reagiert.quelle
Ich bin gerade auf einen KB-Artikel gestoßen, der einen Fehler enthält, der möglicherweise mit diesem Problem zusammenhängt. In FIX: Leistungsprobleme treten auf, wenn die Aktivität der Datenbanksperre in SQL Server (KB 2926217) zunimmt. Eines der beschriebenen Symptome ist, dass der Abschluss
sp_reset_connection
möglicherweise lange dauert . Der Hotfix ist in den folgenden Updates enthalten:Auf dem Server, auf dem ich dieses Verhalten beobachtet habe, wurde SQL Server 2008 SP3 mit Cumulative Update 5 ausgeführt. Daher ist dieser Fehler möglicherweise aufgetreten. Ich habe das kumulative Update noch nicht ausprobiert (das Problem tritt nicht immer wieder auf), daher kann ich nicht überprüfen, ob es das Problem beheben würde oder nicht. Ich wollte jedoch die Informationen bereitstellen, falls jemand die gleichen Symptome hatte.
quelle