web-dev-qa-db-fra.com

Que signifie "exec sp_reset_connection" dans SQL Server Profiler?

Essayer de comprendre ce que signifie Sql Profiler en émettant "sp_reset_connection".

J'ai le suivant, "exec sp_reset_connection" ligne suivie par 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]    

Fondamentalement, la première ligne "exec sp_reset_connection" signifie-t-elle que l'ensemble du processus (ma connexion a été ouverte, que stmt est exécuté, puis que la connexion est fermée et restituée au pool) a juste lieu? Ou ma connexion est encore en phase ouverte.

Et pourquoi sp_reset_connection est-il exécuté avant ma propre instruction select? La réinitialisation ne devrait-elle pas avoir lieu après le sql de l'utilisateur?

J'essaie de savoir s'il existe un moyen de savoir plus en détail quand une connexion est ouverte et fermée.

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

165
Ray

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

Le blog MSDN de Jimmy Mays a déclaré:

sp_reset_connection NE réinitialise PAS le niveau d'isolation de transaction sur la valeur par défaut du serveur définie dans la connexion précédente.

[~ # ~] mise à jour [~ # ~] : à partir de SQL 2014, pour les pilotes clients dotés de TDS version 7.3 ou ultérieure, les niveaux d'isolation de transaction être réinitialisé à la valeur par défaut.

ref: SQL Server: le niveau d'isolement fuit sur les connexions en pool

Voici quelques informations supplémentaires:

Que fait sp_reset_connection?

Les couches de l'API d'accès aux données telles que ODBC, OLE-DB et System.Data.SqlClient appellent toutes la procédure stockée (interne) sp_reset_connection lors de la réutilisation d'une connexion à partir d'un pool de connexions. Cela permet de réinitialiser l’état de la connexion avant qu’elle ne soit réutilisée. Cependant, aucun élément n’est documenté sur les éléments 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 EC (contextes d'exécution) qui sont des fils enfants d'un EC parent exécutant une requête parallèle

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

  • Libère tous les tampons bloqués 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 tous les handles SQL-XML ouverts qui sont ouverts

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

  • 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 lors de l'inscription

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

  • Frees acquis des serrures

  • 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 d'identité @@

  • Réinitialise toutes les options de trace de niveau session en utilisant dbcc traceon ()

  • Réinitialise CONTEXT_INFO sur NULL dans SQL Server 2005 et versions ultérieures [ne fait pas partie de l'article original]

sp_reset_connection NE réinitialisera PAS:

  • Contexte de sécurité, raison pour laquelle le regroupement de connexions établit une correspondance entre les 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 peuvent pas être annulés

Remarque: j'inclus la liste ici car je ne veux pas qu'elle soit perdue dans le Web toujours transitoire.

189
ram

Cela indique que le regroupement de connexions est utilisé (ce qui est une bonne chose).

21
Mitch Wheat

Notez cependant:

Si vous émettez 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 lors de l'appel de l'objet. Par exemple, si vous définissez REPEATABLE READ dans un lot et que celui-ci appelle ensuite une procédure stockée définissant le niveau d'isolation sur SERIALIZABLE, le paramètre de niveau d'isolation repasse à REPEATABLE READ lorsque la procédure stockée redonne le contrôle au lot.

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

9
SAO