Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Que fait sp_reset_connection ?

Les couches de l'API d'accès aux données comme ODBC, OLE-DB et SqlClient appellent la procédure stockée (interne) sp_reset_connection lors de la réutilisation d'une connexion à partir d'un pool de connexions. Il le fait pour réinitialiser l'état de la connexion avant qu'elle ne soit réutilisée.

Il ne semble pas y avoir de documentation officielle sur les éléments réinitialisés, mais voici une liste non officielle.

sp_reset_connection réinitialise les aspects suivants d'une connexion :

  • Il réinitialise tous les états et numéros d'erreur (comme @@error)
  • Il arrête tous les EC (contextes d'exécution) qui sont des threads enfants d'un EC parent exécutant une requête parallèle
  • Il attendra toutes les opérations d'E/S en attente qui sont en attente
  • Cela libérera tous les tampons détenus sur le serveur par la connexion
  • Cela déverrouillera toutes les ressources de tampon utilisées par la connexion
  • Cela libérera toute la mémoire allouée appartenant à la connexion
  • Cela effacera toutes les tables de travail ou temporaires créées par la connexion
  • Cela tuera tous les curseurs globaux appartenant à la connexion
  • Cela fermera tous les descripteurs SQL-XML ouverts
  • Cela supprimera toutes les tables de travail liées à SQL-XML ouvertes
  • Cela fermera toutes les tables système
  • Cela fermera toutes les tables d'utilisateurs
  • Cela supprimera tous les objets temporaires
  • Cela annulera les transactions ouvertes
  • Il sortira d'une transaction distribuée lorsqu'il sera inscrit
  • Cela décrémentera le nombre de références pour les utilisateurs dans la base de données actuelle ; ce qui libère le verrouillage de la base de données partagée
  • Cela libérera les verrous acquis
  • Cela libérera toutes les poignées qui pourraient avoir été acquises
  • Cela réinitialisera toutes les options SET aux valeurs par défaut
  • Cela réinitialisera la valeur @@rowcount
  • Cela réinitialisera la valeur @@identity
  • Il réinitialisera toutes les options de trace au niveau de la session à l'aide de dbcc traceon()

sp_reset_connection ne réinitialisera PAS :

  • Contexte de sécurité, c'est pourquoi le regroupement de connexions correspond aux connexions en fonction de la chaîne de connexion exacte
  • Si vous avez saisi un rôle d'application à l'aide de sp_setapprole, puisque les rôles d'application ne peuvent pas être annulés
  • Le niveau d'isolement des transactions