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?
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:
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.
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'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.