sql >> Databasteknik >  >> RDS >> Sqlserver

Vad gör sp_reset_connection?

Dataaccess API:s lager som ODBC, OLE-DB och SqlClient anropar den (interna) lagrade proceduren sp_reset_connection när en anslutning från en anslutningspool återanvänds. Den gör detta för att återställa anslutningens tillstånd innan den återanvänds.

Det verkar inte finnas officiell dokumentation om vilka saker som återställs, men här är en inofficiell lista.

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

  • Den återställer alla feltillstånd och siffror (som @@error)
  • Den stoppar alla EC:er (exekveringskontexter) som är underordnade trådar till en överordnad EC som kör en parallell fråga
  • Den väntar på alla utestående I/O-operationer som är utestående
  • Det kommer att frigöra alla lagrade buffertar på servern genom anslutningen
  • Det kommer att låsa upp alla buffertresurser som används av anslutningen
  • Den frigör allt minne som tilldelats som ägs av anslutningen
  • Det kommer att rensa alla arbets- eller temporära tabeller som skapas av anslutningen
  • Det kommer att döda alla globala markörer som ägs av anslutningen
  • Den stänger alla öppna SQL-XML-handtag som är öppna
  • Det kommer att radera alla öppna SQL-XML-relaterade arbetstabeller
  • Det stänger alla systemtabeller
  • Det stänger alla användartabeller
  • Den kommer att ta bort alla tillfälliga objekt
  • Det kommer att avbryta öppna transaktioner
  • Det kommer att defekta från en distribuerad transaktion när den värvas
  • Det kommer att minska referensantalet för användare i den aktuella databasen, vilket frigör delat databaslås
  • Det kommer att frigöra förvärvade lås
  • Det släpper alla handtag som kan ha förvärvats
  • Det kommer att återställa alla SET-alternativ till standardvärdena
  • Det återställer @@rowcount-värdet
  • Det återställer @@identity-värdet
  • Den återställer alla spårningsalternativ på sessionsnivå med dbcc traceon()

sp_reset_connection kommer INTE att återställas:

  • Säkerhetskontext, vilket är anledningen till att anslutningspoolning matchar anslutningar baserat på den exakta anslutningssträngen
  • Om du angav en applikationsroll med sp_setapprole, eftersom applikationsroller inte kan återställas
  • Transaktionsisoleringsnivån


  1. Hur får man antalet element i en JSON-array lagrad som CLOB med Oracle 12c?

  2. Prestandamyter:Klustrade vs. icke-klustrade index

  3. SQL Server-utgångsklausul till en skalär variabel

  4. Finns det någon funktion i oracle som liknar group_concat i mysql?