Frage Was bedeutet "exec sp_reset_connection" in Sql Server Profiler?


Versuchen Sie zu verstehen, was Sql Profiler bedeutet, indem Sie "sp_reset_connection" ausgeben.

Ich habe die folgende, "exec sp_reset_connection" Zeile gefolgt von BatchStarting und Completed,

RPC:Completed       exec sp_reset_connection
SQL:BatchStarting   SELECT [c].[TestID] AS [TestID], [c].[Description] AS [Description] FROM [dbo].[Test] AS [c]
SQL:BatchCompleted  SELECT [c].[TestID] AS [TestID], [c].[Description] AS [Description] FROM [dbo].[Test] AS [c]    

Grundsätzlich bedeutet die erste Zeile "exec sp_reset_connection", dass der gesamte Prozess (meine Verbindung wurde geöffnet, der select stmt wird ausgeführt, dann wird die Verbindung geschlossen und zurück zum Pool freigegeben) gerade stattfindet? Oder meine Verbindung ist noch offen.

Und warum wird die sp_reset_connection vor meiner eigenen select-Anweisung ausgeführt, sollte es nicht nach dem sql des Benutzers zurückgesetzt werden?

Ich versuche zu wissen, gibt es eine Möglichkeit, genauer zu wissen, wenn eine Verbindung geöffnet und geschlossen wird?

Wenn "exec sp_reset_connection" angezeigt wird, bedeutet das, dass meine Verbindung geschlossen ist?


152
2018-03-13 01:07


Ursprung


Antworten:


Wie die anderen Antworten sagten, sp_reset_connection gibt an, dass der Verbindungspool wiederverwendet wird. Sei dir einer bestimmten Konsequenz bewusst!

Jimmy Mays 'MSDN Blog sagte:

sp_reset_connection setzt die Datei NICHT zurück   Transaktionsisolationsstufe zum   Serverstandard von der vorherigen   Verbindungseinstellung.

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

Ref: SQL Server: Isolationsebene leckt über gepoolte Verbindungen

Hier sind einige zusätzliche Informationen:

Was macht sp_reset_connection?

Layer der Datenzugriffs-API wie ODBC,   OLE-DB und System.Data.SqlClient alle   Rufen Sie die (interne) gespeicherte Prozedur auf   sp_reset_connection beim erneuten Verwenden von a   Verbindung aus einem Verbindungspool. Es   tut dies, um den Zustand der   Verbindung, bevor es wiederverwendet wird,   aber nirgends ist was dokumentiert   Dinge werden zurückgesetzt. Dieser Artikel versucht es   dokumentieren die Teile des   Verbindung, die zurückgesetzt wird.

sp_reset_connection setzt den Befehl zurück   folgende Aspekte einer Verbindung:

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

  • Stoppt alle ECs (Ausführungskontexte)   das sind untergeordnete Fäden eines Elternteils   Ausführen einer parallelen Abfrage

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

  • Gibt alle gehaltenen Puffer auf der   Server durch die Verbindung

  • Entsperrt alle Pufferressourcen   die von der Verbindung verwendet werden

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

  • Löscht jede Arbeit oder vorübergehend   Tabellen, die von der erstellt werden   Verbindung

  • Tötet alle globalen Cursor, die der   Verbindung

  • Schließt alle offenen 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 bei einer verteilten Transaktion bei der Anmeldung

  • Verringert den Referenzzähler   für Benutzer in der aktuellen Datenbank welche   gibt freigegebene Datenbanksperren frei

  • Befreit erworbene Schlösser

  • 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 jeden Sitzungsebenen-Trace zurück   Optionen mit dbcc traceon ()

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

sp_reset_connection wird NICHT zurückgesetzt:

  • Sicherheitskontext, weshalb   Verbindungspooling stimmt mit Verbindungen überein   basierend auf der genauen Verbindungszeichenfolge

  • Anwendungsrollen eingegeben   mit sp_setapprole, seit der Anwendung   Rollen können nicht zurückgesetzt werden

Hinweis: Ich füge die Liste hier ein, da ich nicht möchte, dass sie im immerwährenden Netz verloren geht.


172
2018-05-27 20:01



Es ist ein Hinweis darauf, dass Verbindungspooling verwendet wird (was eine gute Sache ist).


17
2018-03-13 01:32



Beachten Sie jedoch:

Wenn Sie SET TRANSACTION ISOLATION LEVEL in einer gespeicherten Prozedur oder einem Trigger ausgeben, wird die Isolationsstufe auf die Ebene zurückgesetzt, die beim Aufruf des Objekts aktiv war, wenn das Objekt die Steuerung zurückgibt. Wenn Sie beispielsweise REPEATABLE READ in einem Stapel setzen und der Stapel dann eine gespeicherte Prozedur aufruft, die die Isolationsstufe auf SERIALIZABLE setzt, wird die Einstellung der Isolationsstufe auf REPEATABLE READ zurückgesetzt, wenn die gespeicherte Prozedur die Steuerung an den Stapel zurückgibt.

http://msdn.microsoft.com/en-us/library/ms173763.aspx


8
2017-08-03 10:01