Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was bedeutet exec sp_reset_connection im SQL Server Profiler?

Wie die anderen Antworten sagten, sp_reset_connection gibt an, dass der Verbindungspool wiederverwendet wird. Beachten Sie eine besondere Konsequenz!

MSDN-Blog von Jimmy Mays sagte:

sp_reset_connection setzt die Transaktions-Isolationsstufe NICHT auf die Server-Standardeinstellung von der vorherigen Verbindungseinstellung zurück.

AKTUALISIEREN Hinweis:Ab SQL 2014 werden die Transaktionsisolationsstufen für Clienttreiber mit TDS-Version 7.3 oder höher auf den Standardwert zurückgesetzt.

ref:SQL Server:Lecks der Isolationsstufe über gepoolte Verbindungen

Hier sind einige zusätzliche Informationen:

Was macht sp_reset_connection?

Die Schichten der Datenzugriffs-API wie ODBC, OLE-DB und System.Data.SqlClient rufen alle die (internen) gespeicherten Prozeduren p_reset_connection auf, wenn eine Verbindung aus einem Verbindungspool wiederverwendet wird. Dies geschieht, um den Status der Verbindung zurückzusetzen, bevor sie wiederverwendet wird, es ist jedoch nirgendwo dokumentiert, was zurückgesetzt wird. Dieser Artikel versucht, die Teile der Verbindung zu dokumentieren, die zurückgesetzt werden.

sp_reset_connection setzt die folgenden Aspekte einer Verbindung zurück:

  • Alle Fehlerzustände und -nummern (wie @@error)

  • Stoppt alle ECs (Ausführungskontexte), die untergeordnete Threads eines Eltern-ECs sind, die eine parallele Abfrage ausführen

  • Wartet auf alle ausstehenden E/A-Operationen, die ausstehend sind

  • Gibt alle von der Verbindung gehaltenen Puffer auf dem Server frei

  • Entsperrt alle Pufferressourcen, die von der Verbindung verwendet werden

  • Gibt den gesamten zugewiesenen Speicher frei, der der Verbindung gehört

  • Löscht alle Arbeits- oder temporären Tabellen, die von der Verbindung erstellt wurden

  • Beendet alle globalen Cursor, die theconnection gehören

  • Schließt alle geöffneten SQL-XML-Handles, die geöffnet sind

  • Löscht alle offenen SQL-XML-bezogenen Arbeitstabellen

  • Schließt alle Systemtabellen

  • Schließt alle Benutzertabellen

  • Löscht alle temporären Objekte

  • Bricht offene Transaktionen ab

  • Fehler aus einer verteilten Transaktion, wenn eingetragen

  • Verringert den Referenzzähler für Benutzer in der aktuellen Datenbank, wodurch gemeinsam genutzte Datenbanksperren freigegeben werden

  • Gibt erworbene Sperren frei

  • Gibt alle erworbenen Handles frei

  • Setzt alle SET-Optionen auf die Standardwerte zurück

  • Setzt den @@rowcount-Wert

    zurück
  • Setzt den @@identity-Wert

    zurück
  • Setzt alle Ablaufverfolgungsoptionen auf Sitzungsebene mit dbcc traceon()

    zurück
  • Setzt CONTEXT_INFO auf NULL zurück in SQL Server 2005 und neuer [ nicht Teil des Originalartikels ]

sp_reset_connection wird NICHT zurückgesetzt:

  • Sicherheitskontext, weshalb das Verbindungspooling Verbindungen basierend auf der genauen Verbindungszeichenfolge abgleicht

  • Mit sp_setapprole eingegebene Anwendungsrollen, da Anwendungsrollen vor SQL Server 2005 überhaupt nicht zurückgesetzt werden konnten. Ab SQL Server 2005 können App-Rollen zurückgesetzt werden, aber nur mit zusätzlichen Informationen, die nicht Teil der Sitzung sind. Vor dem Schließen der Verbindung müssen Anwendungsrollen manuell über sp_unsetapprole mithilfe eines „Cookie“-Werts zurückgesetzt werden, der erfasst wird, wenn sp_setapprole wird ausgeführt.

Hinweis:Ich füge die Liste hier hinzu, da ich nicht möchte, dass sie in dem immer flüchtigeren Netz verloren geht.