Podobnie jak w przypadku innych odpowiedzi, sp_reset_connection
wskazuje, że pula połączeń jest ponownie używana. Zwróć uwagę na jedną konkretną konsekwencję!
Blog Jimmy'ego Maysa MSDN powiedział:
sp_reset_connection NIE resetuje poziomu izolacji transakcji do domyślnego ustawienia serwera z poprzedniego połączenia.
AKTUALIZUJ :Począwszy od SQL 2014, w przypadku sterowników klienta z TDS w wersji 7.3 lub nowszej poziomy izolacji transakcji zostaną zresetowane do wartości domyślnych.
ref:SQL Server:przecieki poziomu izolacji w połączeniach w puli
Oto kilka dodatkowych informacji:
Co robi sp_reset_connection?
Warstwy interfejsu API dostępu do danych, takie jak ODBC, OLE-DB i System.Data.SqlClient, wszystkie wywołują (wewnętrzne) procedury składowanep_reset_connection, gdy ponownie używają połączenia z puli połączeń. Robi to, aby zresetować stan połączenia, zanim zostanie ponownie użyty, jednak nigdzie nie jest udokumentowane, co zostanie zresetowane. W tym artykule staramy się udokumentować części połączenia, które są resetowane.
sp_reset_connection resetuje następujące aspekty połączenia:
-
Wszystkie stany i liczby błędów (np. @@error)
-
Zatrzymuje wszystkie EC (konteksty wykonania), które są wątkami potomnymi rodzica EC wykonującego równoległe zapytanie
-
Czeka na wszelkie zaległe operacje we/wy, które są zaległe
-
Zwalnia wszystkie przechowywane bufory na serwerze przez połączenie
-
Odblokowuje wszystkie zasoby bufora używane przez połączenie
-
Zwalnia całą przydzieloną pamięć posiadaną przez połączenie
-
Usuwa wszelkie prace lub tabele tymczasowe utworzone przez połączenie
-
Zabija wszystkie globalne kursory należące do połączenia
-
Zamyka wszystkie otwarte uchwyty SQL-XML, które są otwarte
-
Usuwa wszystkie otwarte tabele robocze związane z SQL-XML
-
Zamyka wszystkie tabele systemowe
-
Zamyka wszystkie tabele użytkowników
-
Upuszcza wszystkie tymczasowe obiekty
-
Przerywa otwarte transakcje
-
Wady z transakcji rozproszonej po zgłoszeniu
-
Zmniejsza liczbę odwołań dla użytkowników w bieżącej bazie danych, co zwalnia współdzielone blokady bazy danych
-
Zwalnia nabyte zamki
-
Zwalnia wszystkie nabyte uchwyty
-
Resetuje wszystkie opcje SET do wartości domyślnych
-
Resetuje wartość @@rowcount
-
Resetuje wartość @@identity
-
Resetuje wszystkie opcje śledzenia na poziomie sesji za pomocą dbcc traceon()
-
Resetuje CONTEXT_INFO do
NULL
w SQL Server 2005 i nowszych [nie jest częścią oryginalnego artykułu]
sp_reset_connection NIE zostanie zresetowany:
-
Kontekst bezpieczeństwa, dlatego pula połączeń dopasowuje połączenia w oparciu o dokładny ciąg połączenia
-
Role aplikacji wprowadzone za pomocą sp_setapprole, ponieważ ról aplikacji nie można było przywrócić w ogóle przed SQL Server 2005. Począwszy od SQL Server 2005, role aplikacji można przywrócić, ale tylko za pomocą dodatkowych informacji, które nie są częścią sesji. Przed zamknięciem połączenia role aplikacji należy ręcznie przywrócić za pomocą funkcji sp_unsetapprole przy użyciu wartości „cookie”, która jest przechwytywana, gdy
sp_setapprole
jest wykonywany.
Uwaga:dołączam tę listę tutaj, ponieważ nie chcę, aby została zagubiona w zawsze przejściowej sieci.