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

Was macht sp_reset_connection?

Die Schichten der Datenzugriffs-API wie ODBC, OLE-DB und SqlClient rufen die (interne) gespeicherte Prozedur sp_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 scheint keine offizielle Dokumentation darüber zu geben, welche Dinge zurückgesetzt werden, aber hier ist eine inoffizielle Liste.

sp_reset_connection setzt die folgenden Aspekte einer Verbindung zurück:

  • Es setzt alle Fehlerzustände und -nummern zurück (wie @@error)
  • Es stoppt alle ECs (Ausführungskontexte), die untergeordnete Threads eines übergeordneten ECs sind, das eine parallele Abfrage ausführt
  • Es wird auf ausstehende E/A-Operationen gewartet
  • Es wird alle von der Verbindung gehaltenen Puffer auf dem Server freigeben
  • Es entsperrt alle Pufferressourcen, die von der Verbindung verwendet werden
  • Es wird den gesamten Speicher freigeben, der der Verbindung gehört
  • Es werden alle Arbeits- oder temporären Tabellen gelöscht, die von der Verbindung erstellt wurden
  • Es wird alle globalen Cursor der Verbindung beenden
  • Es schließt alle offenen SQL-XML-Handles, die geöffnet sind
  • Es werden alle offenen SQL-XML-bezogenen Arbeitstabellen gelöscht
  • Es schließt alle Systemtabellen
  • Alle Benutzertabellen werden geschlossen
  • Alle temporären Objekte werden gelöscht
  • Es wird offene Transaktionen abbrechen
  • Es wird von einer verteilten Transaktion abfallen, wenn es eingetragen wird
  • Es wird den Referenzzähler für Benutzer in der aktuellen Datenbank verringern, die die freigegebene Datenbanksperre aufheben
  • Es wird erworbene Sperren freigeben
  • Es wird alle möglicherweise erworbenen Handles freigeben
  • Es wird alle SET-Optionen auf die Standardwerte zurücksetzen
  • Es wird den @@rowcount-Wert zurücksetzen
  • Es wird den @@Identity-Wert zurücksetzen
  • Es wird alle Ablaufverfolgungsoptionen auf Sitzungsebene mit dbcc traceon() zurücksetzen

sp_reset_connection wird NICHT zurückgesetzt:

  • Sicherheitskontext, weshalb Verbindungspooling Verbindungen basierend auf der genauen Verbindungszeichenfolge abgleicht
  • Wenn Sie eine Anwendungsrolle mit sp_setapprole eingegeben haben, da Anwendungsrollen nicht zurückgesetzt werden können
  • Die Transaktionsisolationsstufe