Que signifie "connexion de réinitialisation exec sp" dans le profileur de Serveur Sql?
essayer de comprendre ce que Sql Profiler signifie en émettant "sp_reset_connection".
j'ai la ligne suivante, "exec sp_reset_connection", suivie de BatchStarting et complétée,
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]
est-ce que la première ligne" exec sp_reset_connection " signifie que tout le processus (ma connexion a été ouverte, le stmt de select est lancé, puis la connexion est fermée et relâchée) a juste lieu? Ou ma connexion est toujours ouvert étape.
et, pourquoi la connexion sp_reset_connection exécutée avant ma propre déclaration select, ne devrait-elle pas être réinitialisée après le sql de l'utilisateur?
j'essaie de savoir s'il y a 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?
3 réponses
comme dans les autres réponses, sp_reset_connection
indique que le pool de connexion est réutilisé. Soyez conscient d'une conséquence particulière!
Jimmy Mays' MSDN Blog said:
sp_reset_connection ne réinitialise PAS le niveau d'isolement de la transaction défaut du serveur par rapport au précédent configuration de connexion.
UPDATE : à partir de SQL 2014, pour les pilotes clients avec TDS version 7.3 ou supérieure, les niveaux d'isolation des transactions seront réinitialisés par défaut.
ref: SQL Server: le niveau d'Isolation des fuites à travers les connexions regroupées
Voici quelques informations supplémentaires:
les couches de L'API D'accès aux données comme ODBC, OLE-DB et système.Données.SqlClient tous appeler la procédure (interne) stockée sp_reset_connection lors de la réutilisation d'un connexion à partir d'un pool de connexions. Il cela pour réinitialiser l'état de l' connexion avant la réutilisation, cependant nulle part est documenté les choses se réinitialiser. Cet article tente pour documenter les parties connexion qui se réinitialiser.
sp_reset_connection reset the aspects suivants d'une connexion:
tous les États d'erreur et les nombres (comme @@error)
arrête tous les contextes D'exécution) qui sont fils d'enfant D'un parent EC exécution d'une requête parallèle
Attend pour toutes les I/O opérations en cours
serveur par la connexion
déverrouille toute ressource tampon qui sont utilisés par la connexion
libère toute la mémoire allouée propriété de la connexion
nettoie tout travail ou temporaire les tables qui sont créées par le connexion
Tue globale de tous les curseurs détenue par le connexion
ferme toutes les poignées SQL-XML ouvertes
supprime toutes les tables de travail open SQL-XML
ferme toutes les tables de système
ferme toutes les tables d'utilisateurs
Gouttes tous les objets temporaires
annule les transactions ouvertes
défauts d'une transaction distribuée lors de l'enrôlement
décrète le nombre de référence pour les utilisateurs de la base de données courante qui communiqués serrures de base de données partagée
Libère les verrous acquis
libère toutes les poignées acquises
réinitialise toutes les options de SET vers les valeurs par défaut
rétablit la valeur @@rowcount
réinitialise la valeur @@identity
réinitialise une trace de niveau de session options utilisant dbcc traceon ()
Resets CONTEXT_INFO to
NULL
in SQL Server 2005 and new [ ne fait pas partie de l'article original]sp_reset_connection ne sera PAS remis à zéro:
contexte de Sécurité, c'est pourquoi la mise en commun des 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 annulées
Note: j'inclus la liste ici car je ne veux pas qu'elle soit perdue dans le web toujours transitoire.
c'est une indication que la mise en commun des connexions est utilisée (ce qui est une bonne chose).
Remarque cependant:
si vous définissez le niveau D'isolement de la TRANSACTION dans une procédure stockée ou un déclencheur, lorsque l'objet retourne le contrôle, le niveau d'isolement est réinitialisé au niveau en vigueur lorsque l'objet a été invoqué. Par exemple, si vous définissez la lecture répétable dans un lot, et que le lot appelle alors une procédure stockée qui fixe le niveau d'isolement à sérialisable, le réglage du niveau d'isolement revient à la lecture répétable lorsque la procédure stockée renvoie le contrôle à la lot.