sql >> Databasteknik >  >> RDS >> Sqlserver

Vad betyder exec sp_reset_connection i SQL Server Profiler?

Som de andra svaren sa, sp_reset_connection indikerar att anslutningspoolen återanvänds. Var medveten om en speciell konsekvens!

Jimmy Mays MSDN-blogg sa:

sp_reset_connection återställer INTE transaktionsisoleringsnivån till standardservern från den tidigare anslutningens inställning.

UPPDATERA :Från och med SQL 2014, för klientdrivrutiner med TDS version 7.3 eller högre, kommer transaktionsisoleringsnivåerna att återställas till standardinställningarna.

ref:SQL Server:Isolationsnivå läcker över poolade anslutningar

Här är lite ytterligare information:

Vad gör sp_reset_connection?

Dataåtkomst API:s lager som ODBC,OLE-DB och System.Data.SqlClient anropar alla den (interna) lagrade procedurensp_reset_connection när en anslutning från en anslutningspool återanvänds. Den gör detta för att återställa tillståndet för anslutningen innan den återanvänds, men ingenstans dokumenteras vad som återställs. Den här artikeln försöker dokumentera de delar av anslutningen som återställs.

sp_reset_connection återställer följande aspekter av en anslutning:

  • Alla feltillstånd och siffror (som @@error)

  • Stoppar alla EC:er (exekveringskontexter) som är underordnade trådar till en överordnad EC som kör en parallell fråga

  • Väntar på alla utestående I/Ooperationer som är utestående

  • Frigör alla lagrade buffertar på servern genom anslutningen

  • Låser upp alla buffertresurser som används av anslutningen

  • Frigör allt tilldelat minne som ägs av anslutningen

  • Rensar allt arbete eller temporära tabeller som skapas av anslutningen

  • Dödar alla globala markörer som ägs av theconnection

  • Stänger alla öppna SQL-XML-handtag som är öppna

  • Tar bort alla öppna SQL-XML-relaterade arbetstabeller

  • Stänger alla systemtabeller

  • Stänger alla användartabeller

  • Tar bort alla tillfälliga objekt

  • Avbryter öppna transaktioner

  • Defekter från en distribuerad transaktion vid värvning

  • Minskar referensantalet för användare i aktuell databas som släpper delade databaslås

  • Frigör förvärvade lås

  • Frigör alla förvärvade handtag

  • Återställer alla SET-alternativ till standardvärdena

  • Återställer @@rowcount-värdet

  • Återställer @@identity-värdet

  • Återställer alla spårningsalternativ på sessionsnivå med dbcc traceon()

  • Återställer CONTEXT_INFO till NULL i SQL Server 2005 och nyare [ inte en del av den ursprungliga artikeln ]

sp_reset_connection återställs INTE:

  • Säkerhetskontext, vilket är anledningen till att anslutningspoolning matchar anslutningar baserat på den exakta anslutningssträngen

  • Applikationsroller angavs med sp_setapprole, eftersom applikationsroller inte kunde återställas alls före SQL Server 2005. Från och med SQL Server 2005 kan approller återställas, men bara med ytterligare information som inte ingår i sessionen. Innan du stänger anslutningen måste applikationsroller återställas manuellt via sp_unsetapprole med ett "cookie"-värde som fångas när sp_setapprole exekveras.

Obs! Jag inkluderar listan här eftersom jag inte vill att den ska försvinna i den ständigt övergående webben.



  1. MOD() Funktion i Oracle

  2. Hur man genererar FRD-spårning i Oracle Apps 11i/R12

  3. Tips för att hantera PostgreSQL på distans

  4. Kartlägg ett PostGIS-geometripunktfält med Hibernate on Spring Boot