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

Que signifie exec sp_reset_connection dans SQL Server Profiler ?

Comme les autres réponses l'ont dit, sp_reset_connection indique que le pool de connexions est réutilisé. Soyez conscient d'une conséquence particulière !

Blog MSDN de Jimmy Mays a dit :

sp_reset_connection ne réinitialise PAS le niveau d'isolement des transactions sur la valeur par défaut du serveur à partir du paramètre de la connexion précédente.

MISE À JOUR :À partir de SQL 2014, pour les pilotes clients avec TDS version 7.3 ou supérieure, les niveaux d'isolement des transactions seront réinitialisés aux valeurs par défaut.

ref :SQL Server :fuites au niveau de l'isolement sur les connexions regroupées

Voici quelques informations supplémentaires :

Que fait sp_reset_connection ?

Les couches de l'API d'accès aux données comme ODBC, OLE-DB et System.Data.SqlClient appellent toutes les procédures stockées (internes) p_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, mais nulle part n'est documenté ce qui est réinitialisé. Cet article tente de documenter les parties de la connexion qui sont réinitialisées.

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

  • Tous les états et numéros d'erreur (comme @@error)

  • 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

  • Attend toutes les opérations d'E/S en attente qui sont en attente

  • Libère tous les tampons détenus sur le serveur par la connexion

  • Déverrouille toutes les ressources de tampon utilisées par la connexion

  • Libère toute la mémoire allouée appartenant à la connexion

  • Efface toutes les tables de travail ou temporaires créées par la connexion

  • Tue tous les curseurs globaux appartenant à la connexion

  • Ferme toutes les poignées SQL-XML ouvertes qui sont ouvertes

  • Supprime toutes les tables de travail liées à SQL-XML ouvertes

  • Ferme toutes les tables système

  • Ferme toutes les tables utilisateur

  • Supprime tous les objets temporaires

  • Abandonne les transactions ouvertes

  • Défauts d'une transaction distribuée lorsqu'elle est inscrite

  • Décrémente le nombre de références pour les utilisateurs de la base de données actuelle qui libère les verrous de la base de données partagée

  • Libère les verrous acquis

  • Libère toutes les poignées acquises

  • Réinitialise toutes les options SET aux valeurs par défaut

  • Réinitialise la valeur @@rowcount

  • Réinitialise la valeur @@identity

  • Réinitialise toutes les options de trace au niveau de la session à l'aide de dbcc traceon()

  • Réinitialise CONTEXT_INFO à NULL dans SQL Server 2005 et plus récent [ ne fait pas partie de l'article original ]

sp_reset_connection ne sera PAS réinitialisé :

  • Contexte de sécurité, c'est pourquoi le regroupement de connexions correspond aux connexions en fonction de la chaîne de connexion exacte

  • Rôles d'application entrés à l'aide de sp_setapprole, car les rôles d'application ne pouvaient pas du tout être annulés avant SQL Server 2005. À partir de SQL Server 2005, les rôles d'application peuvent être annulés, mais uniquement avec des informations supplémentaires qui ne font pas partie de la session. Avant de fermer la connexion, les rôles d'application doivent être annulés manuellement via sp_unsetapprole à l'aide d'une valeur de "cookie" qui est capturée lorsque sp_setapprole est exécuté.

Remarque :J'inclus la liste ici car je ne veux pas qu'elle se perde dans le Web toujours éphémère.