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

Cosa fa sp_reset_connection?

I livelli dell'API di accesso ai dati come ODBC, OLE-DB e SqlClient chiamano la stored procedure (interna) sp_reset_connection quando si riutilizza una connessione da un pool di connessioni. Lo fa per ripristinare lo stato della connessione prima che venga riutilizzata.

Non sembra esserci documentazione ufficiale su ciò che viene ripristinato, ma ecco un elenco non ufficiale.

sp_reset_connection reimposta i seguenti aspetti di una connessione:

  • Reimposta 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
  • Aspetterà tutte le operazioni di I/O in sospeso che sono in sospeso
  • Libererà tutti i buffer trattenuti sul server dalla connessione
  • Sbloccherà tutte le risorse buffer utilizzate dalla connessione
  • Rilascerà tutta la memoria allocata di proprietà della connessione
  • Cancellerà tutte le tabelle di lavoro o temporanee create dalla connessione
  • Ucciderà tutti i cursori globali di proprietà della connessione
  • Chiuderà tutti gli handle SQL-XML aperti che sono aperti
  • Eliminerà tutte le tabelle di lavoro relative a SQL-XML aperte
  • Chiuderà tutte le tabelle di sistema
  • Chiuderà tutte le tabelle utente
  • Rilascerà tutti gli oggetti temporanei
  • Interromperà le transazioni aperte
  • Difetterà da una transazione distribuita una volta arruolato
  • Diminuirà il conteggio dei riferimenti per gli utenti nel database corrente; che rilasciano il blocco del database condiviso
  • Libererà i lucchetti acquisiti
  • Rilascerà tutti gli handle che potrebbero essere stati acquisiti
  • Ripristinerà tutte le opzioni SET ai valori predefiniti
  • Ripristinerà il valore @@rowcount
  • Ripristinerà il valore @@identity
  • Ripristinerà tutte le opzioni di traccia a livello di sessione utilizzando dbcc traceon()

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
  • Se hai inserito un ruolo dell'applicazione utilizzando sp_setapprole, poiché non è possibile ripristinare i ruoli dell'applicazione
  • Il livello di isolamento della transazione