sql >> Database >  >> RDS >> Sqlserver

Wat doet sp_reset_connection?

Data access API's lagen zoals ODBC, OLE-DB en SqlClient roepen de (interne) opgeslagen procedure sp_reset_connection aan bij hergebruik van een verbinding uit een verbindingspool. Het doet dit om de status van de verbinding te resetten voordat deze opnieuw wordt gebruikt.

Er lijkt geen officiële documentatie te zijn over welke dingen worden gereset, maar hier is een niet-officiële lijst.

sp_reset_connection reset de volgende aspecten van een verbinding:

  • Het reset alle foutstatussen en nummers (zoals @@error)
  • Het stopt alle EC's (uitvoeringscontexten) die onderliggende threads zijn van een bovenliggende EC die een parallelle query uitvoeren
  • Het zal wachten op openstaande I/O-bewerkingen die uitstaan
  • Het zal alle vastgehouden buffers op de server vrijmaken door de verbinding
  • Het ontgrendelt alle bufferbronnen die door de verbinding worden gebruikt
  • Het zal al het geheugen vrijgeven dat eigendom is van de verbinding
  • Het zal alle werk- of tijdelijke tabellen wissen die door de verbinding zijn gemaakt
  • Het zal alle globale cursors doden die eigendom zijn van de verbinding
  • Het sluit alle open SQL-XML-handles die open zijn
  • Het zal alle open SQL-XML-gerelateerde werktabellen verwijderen
  • Het zal alle systeemtabellen sluiten
  • Het zal alle gebruikerstabellen sluiten
  • Het zal alle tijdelijke objecten laten vallen
  • Het zal openstaande transacties afbreken
  • Het zal overlopen van een gedistribueerde transactie wanneer het wordt ingeschakeld
  • Het zal de referentietelling voor gebruikers in de huidige database verlagen, waardoor de gedeelde databasevergrendeling wordt vrijgegeven
  • Het zal verworven sloten bevrijden
  • Het zal alle handvatten vrijgeven die mogelijk zijn verkregen
  • Het zal alle SET-opties terugzetten naar de standaardwaarden
  • Het zal de @@rowcount-waarde resetten
  • Het zal de @@identity-waarde resetten
  • Het zal alle traceeropties op sessieniveau resetten met dbcc traceon()

sp_reset_connection wordt NIET gereset:

  • Beveiligingscontext, daarom komt pooling van verbindingen overeen met verbindingen op basis van de exacte verbindingsreeks
  • Als u een toepassingsrol hebt ingevoerd met sp_setapprole, aangezien toepassingsrollen niet kunnen worden teruggedraaid
  • Het transactie-isolatieniveau


  1. Voer sp_msforeachdb uit in een Java-toepassing

  2. Genereer tabelrelatiediagram van bestaand schema (SQL Server)

  3. Hoe de huidige versie van een MySQL-databasebeheersysteem (DBMS) op te halen?

  4. Een SQL Server Agent-taak uitvoeren met T-SQL