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?

È stato utile?

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.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top