Dlaczego wykonanie sp_reset_connection
procedury składowanej w systemie trwa dłużej niż kilka milisekund, tak jak to pokazano w programie SQL Server Profiler?
Wziąłem prosty ślad z systemu produkcyjnego za pomocą SQL Server Profiler, a następnie użyłem SqlNexus do jego analizy. SqlNexus wskazuje, że sp_reset_connection ma najwyższy łączny czas trwania - 33% ogólnego śladu. Obserwowany czas trwania wynosi od 0 do 7 sekund (12 do 6,833,270 mikrosekund), ale średnio wynosi 0,956 s.
Rozumiem, że sp_reset_connection jest wywoływany, gdy połączenie w puli zostanie ponownie wykorzystane. Widziałem sugestię, że może się tak dziać z powodu obcych śladów , ale wydaje się, że tak nie jest.
Przeczytałem, co robi serwer, gdy wywoływane jest sproc, ale nie sądzę, aby którykolwiek z nich byłby problematyczny w tym przypadku - kod nie pozostawia otwartej transakcji lub ogromnych tabel tymczasowych, które należałoby wyczyścić.
Spojrzałem również na /server/199974/sp-reset-connection-taking-a-long-time-to-run, ale nie było to pomocne.
EDYCJA (2013-12-23): We wszystkich przypadkach odczyty i zapisy wynoszą 0, a procesor prawie zawsze wynosi 0 (tylko dwa wystąpienia niezerowego procesora, oba przy 16 ms).
RPC:Starting
, RPC:Completed
i czekać typy na krótki okres, a następnie przejrzeć dane, aby zobaczyć co czekać typach SPID napotykają w tym czasie.