49 Stimmen

Was bewirkt sp_reset_connection?

Sp_reset_connection scheint vom SQL Server-Verbindungspooling aufgerufen zu werden, um sicherzustellen, dass bei Verbindungen, die aus dem Pool wiederverwendet werden, die meisten ihrer Einstellungen zurückgesetzt werden. Weiß jemand genau, was es tut und was nicht?

z.B. sehe ich aus diese Stelle dass es den Isolationsgrad der Transaktion nicht zurücksetzt

80voto

Chris Klepeis Punkte 9464

Datenzugriffs-APIs wie ODBC, OLE-DB und SqlClient rufen die (interne) gespeicherte Prozedur sp_reset_connection auf, wenn eine Verbindung aus einem Verbindungspool wiederverwendet wird. Damit wird der Status der Verbindung zurückgesetzt, 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)
  • Er stoppt alle ECs (Ausführungskontexte), die Child-Threads eines übergeordneten EC sind, die eine parallele Abfrage ausführen
  • Er wartet auf ausstehende E/A-Operationen, die noch nicht abgeschlossen sind.
  • Es gibt alle gehaltenen Puffer auf dem Server durch die Verbindung frei
  • Sie schaltet alle Pufferressourcen frei, die von der Verbindung verwendet werden.
  • Er gibt den gesamten Speicher frei, der der Verbindung zugeordnet ist
  • Er löscht alle Arbeits- oder temporären Tabellen, die von der Verbindung
  • Es werden alle globalen Cursor, die der Verbindung gehören, gelöscht
  • Es schließt alle offenen SQL-XML-Handles, die geöffnet sind
  • Es werden alle offenen SQL-XML-bezogenen Arbeitstabellen gelöscht
  • Es werden alle Systemtabellen geschlossen
  • Es werden alle Benutzertabellen geschlossen
  • Es werden alle temporären Objekte gelöscht
  • Offene Transaktionen werden abgebrochen
  • Er wird von einer verteilten Transaktion abweichen, wenn er eingetragen wird.
  • Es wird die Anzahl der Verweise auf die Benutzer in der aktuellen Datenbank verringert; die gemeinsame Datenbanksperre wird freigegeben
  • Es wird erworbene Schlösser freigeben
  • Es gibt alle Griffe frei, die möglicherweise erworben wurden
  • Es werden alle SET-Optionen auf die Standardwerte zurückgesetzt
  • Es setzt den Wert @@rowcount zurück
  • Es setzt den @@Identitätswert zurück
  • Es setzt alle Trace-Optionen auf Sitzungsebene mit dbcc traceon() zurück.

sp_reset_connection wird NICHT zurückgesetzt:

  • Sicherheitskontext, weshalb das Pooling von Verbindungen die Verbindungen abgleicht auf der Grundlage der genauen Verbindungszeichenfolge
  • Wenn Sie eine Anwendungsrolle mit sp_setapprole eingegeben haben, da die Anwendung Rollen nicht rückgängig gemacht werden können
  • Der Isolationsgrad der Transaktion

-2voto

Mark Struzinski Punkte 32275

Desde dieser Forumsbeitrag :

Die gespeicherte Prozedur sp_reset_connection wird verwendet, um eine Verbindung zurückzusetzen zurückzusetzen, so dass bei der Verwendung in einem Pool keine verbindungsspezifischen Daten aus einer vorherigen Sitzung gespeichert gespeichert wird, das verbindungsspezifisch ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X