Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Co oznacza exec sp_reset_connection w programie Sql Server Profiler?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Eksploracja SQL Server 2014 WYBIERZ PARALELIZM

  2. Zmień hasło w logowaniu SA w SQL Server (przykład T-SQL)

  3. Zdarzenia oczekiwania serwera SQL -2

  4. Pomysłowe narzędzie SQL Password Changer do resetowania hasła SQL

  5. Sortowanie losowe serwera SQL