Was bedeutet „exec sp_reset_connection“ in der SQL Server Profiler bedeuten? [Duplikat]
Frage
Diese Frage bereits eine Antwort hier:
- Was bedeutet sp_reset_connection zu tun? 2 Antworten
Der Versuch, zu verstehen, was SQL Profiler bedeutet, durch Emittieren "sp_reset_connection".
Ich habe folgende: "exec sp_reset_connection" Linie gefolgt von Batchstarting und abgeschlossen,
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]
Im Grunde genommen hat erste Zeile „exec sp_reset_connection“ bedeutet den gesamten Prozess (meine Verbindung geöffnet wurde, das Auswahl stmt ausgeführt wird, dann wird die Verbindung geschlossen und zurück zum Pool freigegeben) nur stattfinden? Oder meine Verbindung ist immer noch in offener Bühne.
Und warum die sp_reset_connection vor meiner eigenen select-Anweisung ausgeführt wird, sollte es nicht der Reset kommen nach Benutzer-SQL?
Ich versuche, zu wissen, ist es eine Möglichkeit, genauer zu wissen, wenn eine Verbindung geöffnet und geschlossen wird?
Mit dem "exec sp_reset_connection" zu sehen, bedeutet das, meine Verbindung geschlossen wird?
Lösung
Wie die anderen Antworten gesagt, zeigt sp_reset_connection
dass Verbindungspool wiederverwendet wird. Achten Sie auf eine bestimmte Folge!
Jimmy Mays' MSDN Blog , sagte:
sp_reset_connection nicht zurückgesetzt die Transaktionsisolationsstufe der Server Standard aus dem vorherigen Verbindung der Einstellung.
UPDATE : Beginnend mit SQL 2014 für Client-Treiber mit TDS-Version 7.3 oder höher, werden die Transaktionsisolationsstufen auf den Standard zurücksetzen zurück.
ref: SQL Server: Isolation Ebene Lecks über Pool-Verbindungen
Hier finden Sie einige zusätzliche Informationen:
Was sp_reset_connection tut tun?
Der Datenzugriff API Schichten wie ODBC, OLE-DB und System.Data.SqlClient alle nennen die (interne) gespeicherten Prozedur sp_reset_connection, wenn ein Wiederverwenden Verbindung von einem Verbindungspool. Es bedeutet dies den Zustand des zurücksetzen Verbindung, bevor es wiederverwendet wird, aber nirgends dokumentiert, was Dinge zurückgesetzt. Dieser Artikel versucht, zu dokumentieren, die Teile des Verbindung, die Reset erhalten.
sp_reset_connection setzt die Folgende Aspekte einer Verbindung:
Alle Fehlerzustände und Zahlen (Wie @@ error)
- Ausführen
stoppt alle EC (Ausführungskontexte) EG, das Kind Fäden eines Elternteil eine parallele Abfrage
Wartet auf alle ausstehenden I / O Operationen, die aussteht
Befreit alle gehaltenen Puffer auf die Server durch die Verbindung
Unlocks keine Pufferressourcen die durch die Verbindung verwendet werden
Releases alle zugewiesenen Speicher im Besitz der Verbindung
Löscht alle Arbeit oder temporäre Tabellen, die durch die erstellt werden Verbindung
Tötet alle globalen Cursor im Besitz des Verbindung
Schließt alle geöffneten SQL-XML-Griffe, die offen sind
Löscht alle geöffneten SQL-XML-bezogene Arbeit Tabellen
Schließt alle Systemtabellen
Schließt alle Benutzertabellen
Drops alle temporäre Objekte
Bricht offene Transaktionen
Defekte von einer verteilten Transaktion, wenn eingetragen
Reduziert den Referenzzähler für die Benutzer in der aktuellen Datenbank, die Versionen gemeinsam genutzte Datenbanksperre
Frees erworben Schlösser
gibt alle erworbenen Griffe
Setzt alle SET-Optionen auf die Standardwerte
Setzt den @@ rowcount Wert
Setzt den @@ identity Wert
- mit
Setzt jede Sitzungsebene Spur Optionen dbcc traceon ()
Resets CONTEXT_INFO in SQL Server 2005 und neuere
NULL
[nicht Teil des ursprünglichen Artikels]sp_reset_connection wird nicht zurückgesetzt:
Sicherheitskontext, weshalb Verbindungspooling Spiele Verbindungen basierend auf der genauen Verbindungszeichenfolge
- rückgängig gemacht werden
Anwendungsrollen eingetragen mit sp_setapprole, da die Anwendung Rollen können nicht
. Hinweis: Ich schließe die Liste hier, wie ich es will nicht, dass in den immer transienten Web verloren gehen
Andere Tipps
Es ist ein Hinweis darauf, dass Verbindungspooling verwendet wird (was eine gute Sache ist).
Hinweis jedoch:
Wenn Sie Ausgabe Transaktionsisolationsstufe in einer Stored Procedure oder Trigger gesetzt, wenn das Objekt kehrt die Isolationsstufe steuern auf das Niveau in der Tat zurückgesetzt wird, wenn das Objekt aufgerufen wurde. wenn Sie WIEDERHOLBARE READ in einer Charge und der Ansatz dann ruft eine gespeicherte Prozedur zum Beispiel festgelegt, dass die Isolationsstufe auf SERIALIZABLE setzt, kehrt die Isolationsstufe Einstellung READ wiederholbar, wenn die gespeicherte Prozedur kehrt zum Batch-Steuerung.