Pytanie SQL Server "Operacja wylogowania kontroli" trwa długo.


Mamy procedurę przechowywaną, która jest nazywana około 300 000 razy dziennie przez 15 użytkowników w ciągu dnia. Przelałem każdą linię i jest tak skuteczny, jak tylko mogę.

Procedura przechowywana jest dostępna za pośrednictwem strony ASP.NET w wersji 4.0 ze starej aplikacji VB6 na podstawowym pakiecie Winterms.

Kiedy patrzę na plik śledzenia SQL, widzę:

  1. exec sp_reset_connection (Korzystanie z puli połączeń)
  2. Logowanie kontroli
  3. Wykonanie procedury składowanej
  4. Audyt Wyloguj

Widzę, że na etapie 4 odczyt i zapis są bardzo wysokie, co ma sens, ponieważ jest to nagromadzenie połączenia, które jest ponownie wykorzystywane w puli.

Co mnie martwi, to jak długo to trwa, czasami na 50ms, a innym razem 400ms, to jest całkowicie losowe. Z dokumentów, które przeczytałem "Wylogowanie audytu", jest cały czas trwania dla wszystkich trzech kroków. Ale kroki 1-3 były bardzo szybkie, jak 0-5ms. Dlaczego czas "Wylogowania audytu" byłby tak długi?


12
2017-12-05 22:25


pochodzenie




Odpowiedzi:


Zajmuję się teraz podobnym problemem i natknąłem się na to stanowisko: http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/84ecfe9e-ff0e-4fc5-962b-cffdcbc619ee

Może to (z powyższego postu) jest rozwiązaniem:

"Zidentyfikowano jeden błąd w mojej analizie, gdy połączenie jest   wyjęty z puli, serwer wysyła sp_reset_connection.   To reset wywołuje dziennik inspekcji, po którym następuje dziennik inspekcji. The   Następny audit_logout nie występuje do czasu następnego połączenia   wyciągnięte z basenu ... więc długie interwały, które widzę, obejmują   czas, w którym aplikacja przetwarza wyniki zapytania, zwalnia   połączenie z pulą połączeń, robi cokolwiek, a na końcu ściąga   połączenie z powrotem z puli, aby rozpocząć następną transakcję. "


6
2018-03-15 21:27