Que fait & # 8220; exec sp_reset_connection & # 8221; signifie dans SQL Server Profiler? [dupliquer]
Question
Cette question a déjà une réponse ici:
- Que fait sp_reset_connection? 2 réponses
Essayer de comprendre ce que signifie Sql Profiler en émettant "sp_reset_connection".
J'ai les informations suivantes: "exec sp_reset_connection" ligne 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]
Fait essentiellement la première ligne " exec sp_reset_connection " signifie l'ensemble du processus (ma connexion a été ouverte, le stmt de sélection est exécuté, puis la connexion est fermée et libéré à la piscine) juste avoir lieu? Ou ma connexion est encore en phase ouverte.
Et pourquoi la sp_reset_connection exécutée avant ma propre instruction select ne devrait-elle pas être réinitialisée 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?
La solution
Comme indiqué dans les autres réponses, 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 au valeur par défaut du serveur de la précédente paramètre de la connexion.
UPDATE : à partir de SQL 2014, pour les pilotes clients dotés de TDS version 7.3 ou ultérieure, les niveaux d'isolation de transaction seront réinitialisés à leurs valeurs par défaut.
ref: SQL Server: le niveau d'isolement fuit au travers des connexions en pool
Voici quelques informations supplémentaires:
Que fait sp_reset_connection faire?
Les couches de l'API d'accès aux données telles que ODBC, OLE-DB et System.Data.SqlClient all appeler la procédure stockée (interne) sp_reset_connection lors de la réutilisation d'un connexion à partir d'un pool de connexion. Il fait cela pour réinitialiser l'état de la connexion avant qu'il ne soit réutilisé, mais nulle part est documenté ce que les choses sont réinitialisées. Cet article tente documenter les parties du connexion qui se réinitialise.
sp_reset_connection réinitialise le 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 parent EC exécuter une requête parallèle
Attend les E / S en attente opérations en suspens
Libère tous les tampons maintenus sur le serveur par la connexion
Déverrouille toutes les ressources de la mémoire tampon qui sont utilisés par la connexion
Libère toute la mémoire allouée appartenant à la connexion
Efface tout travail ou travail temporaire tables créées par le connexion
Tue tous les curseurs globaux appartenant au connexion
Ferme tous les descripteurs SQL-XML ouverts qui sont ouverts
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 en cours
Défauts d'une transaction distribuée lors de l'inscription dans une liste
Décrémente le nombre de références pour les utilisateurs de la base de données actuelle libère les verrous de base de données partagés
Libère les verrous acquis
Libère tous les descripteurs acquis
Réinitialise toutes les options SET aux valeurs par défaut
Réinitialise la valeur @@ rowcount
Réinitialise la valeur @@ identity
Réinitialise toute trace au niveau de la session options utilisant dbcc traceon ()
Réinitialise CONTEXT_INFO sur
NULL
dans SQL Server 2005 et versions ultérieures [ne fait pas partie de l'article d'origine]sp_reset_connection NE réinitialisera PAS:
contexte de sécurité, c'est pourquoi le regroupement de connexions correspond aux connexions basé sur la chaîne de connexion exacte
Rôles d'application entrés en utilisant sp_setapprole, depuis l'application les rôles ne peuvent pas être inversés
Remarque: j'inclus la liste ici, car je ne veux pas qu'elle soit perdue dans le Web toujours transitoire.
Autres conseils
Cela indique que le regroupement de connexions est utilisé (ce qui est une bonne chose).
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’isolement sur SERIALIZABLE, le paramètre de niveau d’isolement repasse à REPEATABLE READ lorsque la procédure stockée redonne le contrôle au lot.