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?

Était-ce utile?

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.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top