samedi 11 décembre 2010

Dans le secret des performances SQL Serveur

L’analyse des temps d’attente peut contribuer à améliorer les performances en mettant l’accent sur la durée que mettent les applications pour répondre aux requêtes.
Avez-vous déjà eu l’impression que votre application était ralentie par SQL Server, mais que vous ne saviez pas comment y remédier ?


Types d’attente SQL Server
Le fait de connaître l’existence des types d’attente SQL Server constitue la première étape dans la compréhension de la méthode. A chaque instruction qui s’exécute est associé un délai d’attente. Celui-ci correspond au temps nécessaire à SQL Server pour accéder aux ressources utilisées pour l’exécution de l’instruction. Une requête doit attendre la récupération des données et leur écriture sur le disque ou l’écriture d’une entrée dans le journal. Si vous surveillez attentivement une instance, vous noterez qu’elle fait l’objet d’un certain nombre d’attentes tout au long d’une période donnée. Lorsque les attentes deviennent chroniques ou excessives, un problème de performances peut commencer à apparaître.Types d’attente courantsSQL Server consigne des informations sur le type et la durée des attentes liées à un processus. Même s’il existe plus de 100 types d’attente différents dans SQL Server, il est probable qu’une poignée seulement d’entre eux poseront problème.

Tout type d’attente commençant par « LCK_ » signifie qu’une tâche était en attente d’acquisition d’un verrou. Par exemple, un type d’attente LCK_M_IX signifie que le processus attendait d’acquérir un verrou Intent exclusif. Plus de 20 de ces types correspondent à des attentes de verrou, ce qui est normal puisque la majorité des opérations effectuées dans SQL Server requièrent une forme ou une autre de verrouillage. Viennent ensuite les types de verrous les plus courants ASYNC_IO_COMPLETION et ASYNC_ NETWORK_IO. Le premier signifie un processus qui attendait la fin d’une opération d’E/S et le deuxième, une tâche attendant la fin d’une opération d’E/S sur le réseau.
Enfin, ayez un œil sur l’état d’attente CXPACKET. Celui-ci se produit lorsqu’un processus essaie de synchroniser l’itérateur d’échange du processeur de requêtes. Cela peut indiquer un problème lié au paramètre de parallélisme du serveur. Le temps consacré à identifier les états d’attente potentiels peut être long. En moyenne, près de 20 pour cent des états d’attente potentiels apparaissent dans 80 pour cent des problèmes.
Après avoir effectué des analyses des temps d’attente pendant un certain temps, vous serez habitué à voir certains types, notamment ceux présentés ici.


Capture des données de types d’attente
Cela fait maintenant un certain temps que SQL Server propose des vues de types d’attente mais, malheureusement, ces vues sont vagues et, dans la majorité des cas, n’apportent aucune aide. Dans SQL Server 7.0 et 2000, les DBA pouvaient utiliser Enterprise Manager pour visualiser les types d’attente. Le problème était lié au fait que cet outil proposait uniquement le nom du type d’attente et le délai pendant lequel un processus donné était en attente. Avec l’arrivée de SQL Server Management Studio dans SQL Server 2005, les vues des requêtes et sessions actives sont restées similaires.

Encore une fois, les DBA pouvaient voir un type d’attente et la durée associée, mais pas grand-chose de plus. Le résultat est que les états d’attente rencontrés actuellement par vos processus ne vous aident pas réellement et c’est tout ce que vous pouvez obtenir avec les outils standard.


A l’heure actuelle, une des meilleures façons d’examiner les statistiques d’attente dans SQL Server consiste à utiliser les vues de gestion dynamique (DMV) liées aux statistiques en question.


Si vous exécutez encore SQL Server 2000 ou une version antérieure, c’est dommage car les vues de gestion dynamique ont été introduites dans SQL Server 2005. Les vues les plus pertinentes pour l’examen des statistiques d’attente sont sys.dm_exec_requests, sys.dm_exec_query_ stats et sys.dm_os_wait_stats. (Notez que les vues de gestion dynamique fournissent un instantané des compteurs. Par conséquent, pour les exploiter efficacement, il faut interroger et calculer les deltas.)
  • sys.dm_exec_requests : Cette vue de gestion dynamique propose des informations relatives à chaque requête exécutée sur un serveur SQL Server donné. Lors de l’examen des états d’attente, vous vous intéressez à quelques colonnes seulement de la vue, notamment aux colonnes sql_handle, wait_type, wait_time, last_wait_type et wait_resource. Elles fournissent des informations sur l’instruction en cours d’exécution et l’état d’attente en cours de la requête.
     
  • sys.dm_exec_query_stats : Cette vue retourne des statistiques de performances agrégées pour les requêtes mises en cache. En utilisant la colonne sql_handle de sys.dm_exec_requests afin d’établir une jointure avec une ligne dans cette vue, vous pouvez commencer à avoir une vue d’ensemble de la fréquence de survenance des éventuelles attentes que vous voyez. Ayez à l’esprit que cette vue ne fournit pas plus de détails sur les attentes. Il s’agit juste d’une statistique agrégée pour un sql_handle donné.


  • sys.dm_exec_requests : Cette vue de gestion dynamique propose des informations relatives à chaque requête exécutée sur un serveur SQL Server donné. Lors de l’examen des états d’attente, vous vous intéressez à quelques colonnes seulement de la vue, notamment aux colonnes sql_handle, wait_type, wait_time, last_wait_type et wait_resource. Elles fournissent des informations sur l’instruction en cours d’exécution et l’état d’attente en cours de la requête.
     
  • sys.dm_exec_query_stats : Cette vue retourne des statistiques de performances agrégées pour les requêtes mises en cache. En utilisant la colonne sql_handle de sys.dm_exec_requests afin d’établir une jointure avec une ligne dans cette vue, vous pouvez commencer à avoir une vue d’ensemble de la fréquence de survenance des éventuelles attentes que vous voyez. Ayez à l’esprit que cette vue ne fournit pas plus de détails sur les attentes. Il s’agit juste d’une statistique agrégée pour un sql_handle donné.


sys.dm_os_wait_stats : Cette vue fournit une agrégation de tous les états d’attente sur un serveur SQL Server. Elle retourne une liste des différents états d’attente et des détails sur les tâches dans l’état en question, y compris le nombre de tâches en attente dans chaque état, le temps d’attente total pour l’état et le temps d’attente moyen. Ces détails sont utiles pour obtenir un panorama global ou pour se faire une idée rapide des types d’attente se produisant, mais la majorité des diagnostics réels se dérouleront au niveau de l’instruction.
Thierry
Bonne lecture
.. Article paru dans ITPro

Aucun commentaire:

Enregistrer un commentaire