Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Cosa significa exec sp_reset_connection in Sql Server Profiler?

Come hanno detto le altre risposte, sp_reset_connection indica che il pool di connessioni viene riutilizzato. Sii consapevole di una particolare conseguenza!

Blog MSDN di Jimmy Mays ha detto:

sp_reset_connection NON ripristina il livello di isolamento della transazione al valore predefinito del server dall'impostazione della connessione precedente.

AGGIORNAMENTO :a partire da SQL 2014, per i driver client con TDS versione 7.3 o successiva, i livelli di isolamento delle transazioni verranno reimpostati sui valori predefiniti.

rif:SQL Server:perdite di livello di isolamento nelle connessioni in pool

Ecco alcune informazioni aggiuntive:

Cosa fa sp_reset_connection?

I livelli dell'API di accesso ai dati come ODBC, OLE-DB e System.Data.SqlClient richiamano tutti le stored procedure (interne) p_reset_connection quando si riutilizza una connessione da un pool di connessioni. Lo fa per ripristinare lo stato della connessione prima che venga riutilizzato, tuttavia da nessuna parte è documentato ciò che viene ripristinato. Questo articolo cerca di documentare le parti della connessione che vengono ripristinate.

sp_reset_connection reimposta i seguenti aspetti di una connessione:

  • Tutti gli stati e i numeri di errore (come @@errore)

  • Arresta tutti gli EC (contesti di esecuzione) che sono thread figli di un EC genitore che esegue una query parallela

  • Attende eventuali operazioni di I/O in sospeso in sospeso

  • Libera tutti i buffer trattenuti sul server dalla connessione

  • Sblocca tutte le risorse buffer utilizzate dalla connessione

  • Rilascia tutta la memoria allocata di proprietà della connessione

  • Cancella qualsiasi lavoro o tabella temporanea creata dalla connessione

  • Elimina tutti i cursori globali di proprietà della connessione

  • 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

  • Annulla le transazioni aperte

  • Difetti da una transazione distribuita al momento dell'arruolamento

  • Decrementa il conteggio dei riferimenti per gli utenti nel database corrente che rilascia i blocchi del database condiviso

  • Libera i blocchi acquisiti

  • Rilascia tutte le maniglie acquisite

  • Ripristina tutte le opzioni SET ai valori predefiniti

  • Reimposta il valore @@rowcount

  • Reimposta il valore @@identity

  • Reimposta qualsiasi opzione trace a livello di sessione utilizzando dbcc traceon()

  • Reimposta CONTEXT_INFO su NULL in SQL Server 2005 e versioni successive [ non fa parte dell'articolo originale ]

sp_reset_connection NON verrà ripristinato:

  • Contesto di sicurezza, motivo per cui il pool di connessioni corrisponde alle connessioni in base alla stringa di connessione esatta

  • Ruoli dell'applicazione immessi tramite sp_setapprole, poiché non è stato possibile ripristinare i ruoli dell'applicazione prima di SQL Server 2005. A partire da SQL Server 2005, è possibile ripristinare i ruoli dell'app, ma solo con informazioni aggiuntive che non fanno parte della sessione. Prima di chiudere la connessione, i ruoli dell'applicazione devono essere ripristinati manualmente tramite sp_unsetapprole utilizzando un valore "cookie" che viene acquisito quando sp_setapprole viene eseguito.

Nota:includo qui l'elenco perché non voglio che vada perso nel web sempre transitorio.