Che cosa significa "exec sp_reset_connection" significa in SQL Server Profiler? [duplicare]
Domanda
Questa domanda ha già una risposta qui:
- Che cosa fa sp_reset_connection? 2 risposte
Cerca di capire cosa significa Profiler SQL emettendo " sp_reset_connection " ;.
Ho il seguente, " exec sp_reset_connection " linea seguita da BatchStarting e 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]
Fondamentalmente fa la prima riga " exec sp_reset_connection " significa che l'intero processo (la mia connessione è stata aperta, lo stmt select viene eseguito, quindi la connessione viene chiusa e rilasciata di nuovo al pool) ha luogo? Oppure la mia connessione è ancora in fase aperta.
E, perché sp_reset_connection viene eseguito prima della mia istruzione select, non dovrebbe il ripristino venire dopo sql dell'utente?
Sto cercando di sapere c'è un modo per sapere più in dettaglio quando una connessione viene aperta e chiusa?
Vedendo " exec sp_reset_connection " ;, significa che la mia connessione è chiusa?
Soluzione
Come hanno detto le altre risposte, sp_reset_connection
indica che il pool di connessioni viene riutilizzato. Sii consapevole di una conseguenza particolare!
Blog MSDN di Jimmy Mays ha detto:
sp_reset_connection NON reimposta il file livello di isolamento della transazione al server predefinito dal precedente impostazione della connessione.
AGGIORNAMENTO : a partire da SQL 2014, per i driver client con TDS versione 7.3 o successiva, i livelli di isolamento delle transazioni verranno ripristinati ai valori predefiniti.
ref: SQL Server: perdite di livello di isolamento tra connessioni in pool
Ecco alcune informazioni aggiuntive:
Cosa significa sp_reset_connection fare?
Livelli dell'API di accesso ai dati come ODBC, OLE-DB e System.Data.SqlClient all chiama la procedura (interna) memorizzata sp_reset_connection quando si riutilizza a connessione da un pool di connessioni. esso fa questo per ripristinare lo stato di connessione prima che venga riutilizzata, tuttavia da nessuna parte è documentato cosa le cose vengono ripristinate. Questo articolo ci prova per documentare le parti di connessione che viene ripristinata.
sp_reset_connection reimposta il seguenti aspetti di una connessione:
Tutti gli stati e i numeri di errore (come @@ error)
Interrompe tutti gli EC (contesti di esecuzione) che sono thread figlio di una EC padre eseguendo una query parallela
Attende qualsiasi I / O in sospeso operazioni eccezionali
Libera tutti i buffer in sospeso sul file server dalla connessione
Sblocca tutte le risorse del buffer che vengono utilizzati dalla connessione
Rilascia tutta la memoria allocata di proprietà della connessione
Cancella qualsiasi lavoro o temporaneo tabelle create da Collegamento
Uccide tutti i cursori globali di proprietà di Collegamento
Chiude tutti gli handle SQL-XML aperti che sono aperti
Elimina tutte le tabelle di lavoro relative a SQL-XML aperte
Chiude tutte le tabelle di sistema
Chiude tutte le tabelle utente
Elimina tutti gli oggetti temporanei
Interrompe le transazioni aperte
Difetti da una transazione distribuita quando arruolati
Diminuisce il conteggio dei riferimenti per gli utenti nel database corrente che rilascia blocchi di database condivisi
Libera i blocchi acquisiti
Rilascia eventuali handle acquisiti
Reimposta tutte le opzioni SET sui valori predefiniti
Reimposta il valore @@ rowcount
Reimposta il valore di identità @@
Reimposta qualsiasi traccia a livello di sessione opzioni usando dbcc traceon ()
Reimposta CONTEXT_INFO su
NULL
in SQL Server 2005 e versioni successive [non parte dell'articolo originale]sp_reset_connection NON verrà ripristinato:
Contesto di sicurezza, ecco perché il pool di connessioni corrisponde alle connessioni basato sulla stringa di connessione esatta
Ruoli dell'applicazione inseriti usando sp_setapprole, dall'applicazione i ruoli non possono essere ripristinati
Nota: sto includendo l'elenco qui perché non voglio che vada perso nel web sempre transitorio.
Altri suggerimenti
Indica che viene utilizzato il pool di connessioni (che è una buona cosa).
Nota comunque:
Se si emette SET TRANSACTION ISOLATION LEVEL in una procedura memorizzata o in un trigger, quando l'oggetto restituisce il controllo il livello di isolamento viene ripristinato al livello in vigore quando l'oggetto è stato invocato. Ad esempio, se si imposta REPEATABLE READ in un batch e il batch chiama quindi una procedura memorizzata che imposta il livello di isolamento su SERIALIZZABILE, l'impostazione del livello di isolamento torna su REPEATABLE READ quando la procedura memorizzata restituisce il controllo al batch.