181 votes

Que signifie "exec sp_reset_connection" affiché dans Sql Profiler ?

J'essaie de comprendre ce que Sql Profiler veut dire en émettant "sp_reset_connection".

J'ai la ligne suivante, "exec sp_reset_connection" suivie de BatchStarting et Completed,

RPC:Completed       exec sp_reset_connection
SQL:BatchStarting   SELECT [c].[TestID] AS [TestID], [c].[Description] AS [Description] FROM [dbo].[Test] AS [c]
SQL:BatchCompleted  SELECT [c].[TestID] AS [TestID], [c].[Description] AS [Description] FROM [dbo].[Test] AS [c]

En fait, la première ligne "exec sp_reset_connection" signifie-t-elle que l'ensemble du processus (ma connexion a été ouverte, l'instruction select est exécutée, puis la connexion est fermée et renvoyée au pool) vient de se dérouler ? Ou bien ma connexion est toujours en phase ouverte.

Et pourquoi l'instruction sp_reset_connection est-elle exécutée avant ma propre instruction select, la réinitialisation ne devrait-elle pas intervenir après l'instruction sql de l'utilisateur ?

J'essaie de savoir s'il existe un moyen de connaître de manière plus détaillée l'ouverture et la fermeture d'une connexion ?

En voyant "exec sp_reset_connection", cela signifie-t-il que ma connexion est fermée ?

Merci, Ray.

210voto

ram Points 4605

Comme l'ont dit les autres réponses, sp_reset_connection indique que le pool de connexion est réutilisé. Attention à une conséquence particulière !

Le blog MSDN de Jimmy Mays a dit :

sp_reset_connection ne remet PAS le niveau d'isolation des d'isolation de la transaction au niveau serveur par défaut à partir de la connexion précédente.

Voici quelques informations supplémentaires :

Que fait sp_reset_connection ?

Couches d'API d'accès aux données comme ODBC, OLE-DB et System.Data.SqlClient font toutes appellent la procédure stockée (interne) sp_reset_connection lors de la réutilisation d'une connexion à partir d'un pool de connexion. Il s'agit de fait cela pour réinitialiser l'état de la connexion avant qu'elle ne soit réutilisée, Cependant, il n'est documenté nulle part ce que les éléments qui sont réinitialisés. 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 CE (contextes d'exécution) qui sont des threads enfants d'un EC parent qui exécute une requête parallèle

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

  • Libère tous les tampons retenus sur le serveur par la connexion

  • Déverrouille toutes les ressources de la mémoire tampon qui sont utilisées par la connexion

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

  • Efface toute table de travail ou temporaire temporaires qui ont été créées par la connexion

  • Tue tous les curseurs globaux appartenant à la connexion

  • Ferme tous les handles SQL-XML ouverts.

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

  • Ferme toutes les tables du système

  • Ferme toutes les tables des utilisateurs

  • Supprime tous les objets temporaires

  • Abandon des transactions ouvertes

  • Défauts d'une transaction distribuée lors de l'enrôlement

  • Diminue le nombre de références pour les utilisateurs de la base de données actuelle qui libère les verrous partagés de la base de données

  • Libère les serrures acquises

  • Libère les poignées acquises

  • Remet toutes les options SET aux valeurs par défaut

  • Réinitialise la valeur @@rowcount

  • Réinitialise la valeur de l'@@identité

  • Réinitialise les options de suivi au niveau de la session en utilisant dbcc traceon()

sp_reset_connection ne sera PAS réinitialisée :

  • Le contexte de sécurité, c'est pourquoi la mise en commun des connexions correspond aux connexions sur la base de la chaîne de connexion exacte

  • Rôles d'application saisis l'aide de sp_setapprole, puisque les d'application ne peuvent pas être annulés

Note : Je joins la liste ici car je ne veux pas qu'elle se perde dans les méandres du web.

23voto

Mitch Wheat Points 169614

C'est une indication que la mise en commun des connexions est utilisée (ce qui est une bonne chose).

10voto

SAO Points 51

Notez cependant :

Si vous émettez la commande SET TRANSACTION ISOLATION LEVEL dans une procédure stockée ou un déclencheur, lorsque l'objet retourne le contrôle, le niveau d'isolation est réinitialisé au niveau en vigueur lorsque l'objet a été invoqué. Par exemple, si vous définissez REPEATABLE READ dans un lot, et que le lot appelle ensuite une procédure stockée qui définit le niveau d'isolement sur SERIALIZABLE, le paramètre du niveau d'isolement redevient REPEATABLE READ lorsque la procédure stockée rend le contrôle au lot.

http://msdn.microsoft.com/en-us/library/ms173763.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X