Sunteți pe pagina 1din 19

Dix conseils pour optimiser

les performances de SQL Server

Par Patrick O’Keefe et Richard Douglas

Avant-propos Introduction
L’optimisation des performances sur SQL Server est une Tenez compte de vos objectifs lors du réglage du système.
opération qui peut s’avérer difficile. En effet, il existe Tout le monde veut optimiser ses déploiements SQL Server.
énormément d’informations sur la manière de traiter les Augmenter l’efficacité de vos serveurs de base de données libère
problèmes de performances de façon générale. Cela étant, il des ressources système pour d’autres tâches, telles que les
y a peu d’informations détaillées sur les problèmes spécifiques, rapports métiers ou les requêtes ad hoc. Pour tirer le maximum
et encore moins sur la façon d’appliquer ces connaissances des investissements en matériel de votre entreprise, vous devez
à votre environnement. vous assurer que la charge de travail SQL ou des applications
fonctionnant sur les serveurs de la base de données s’exécute
Ce document propose dix conseils permettant d’optimiser les aussi rapidement et efficacement que possible.
performances de SQL Server, principalement SQL Server 2008
et 2012. Il n’existe aucune liste de référence regroupant les Toutefois, la façon dont vous effectuez vos réglages dépend
conseils les plus importants, mais en vous appuyant sur ce de vos objectifs. Votre principale préoccupation est peut-être
document, vous ne pouvez pas vous tromper. l’optimisation de l’efficacité de votre déploiement SQL Server,
tandis que d’autres se préoccuperont davantage de la capacité
En tant qu’administrateur de base de données, vous avez très d’évolution de leurs applications… Voici les principales façons
certainement votre façon de voir les choses ainsi que des de régler un système :
conseils, astuces et scripts bien à vous. Alors, pourquoi ne pas •  Réglage pour respecter les objectifs en termes de contrats de niveau
vous joindre à la discussion sur SQLServerPedia ? de service (SLA) ou d’indicateurs clés de performance
•  Réglage afin d’améliorer l’efficacité et de libérer des ressources
pour d’autres tâches
•  Réglage pour assurer une évolutivité, afin de conserver les contrats
de niveau de service (SLA) ou les indicateurs clés de performance
dans le futur
N’oubliez pas que le réglage est un Conseil n° 10 : La méthodologie
processus qui n’a rien de définitif. d’établissement d’une base de
L’optimisation des performances est un référence et de test des performances
processus continu. En effet, si les réglages vous aide à détecter les problèmes
de vos cibles en termes de contrat SLA Présentation du processus
peuvent être définitifs, ceux visant à d’établissement d’une base de
améliorer l’efficacité ou à assurer une référence et de test des performances
La figure 1 illustre les étapes du processus
extensibilité ne le sont jamais vraiment.
d’établissement d’une base de référence.
Ce type de réglages doit se poursuivre Les sections suivantes expliquent les
jusqu’à ce que les performances soient principales étapes de ce processus.
« suffisamment bonnes ». Quand, par la
suite, les performances de l’application
deviennent insuffisantes, il est nécessaire
Définir l’objectif
de reprendre ces réglages.
Optimisez
Identifier les
l’extensibilité et Le sens du terme « suffisamment bonnes » améliorations
potentielles
dépend généralement des impératifs
l’efficacité de tous métiers, tels que les exigences en termes
les serveurs de de contrats SLA ou de débit système.
Au-delà de ces exigences, il est largement
Classer les améliorations
potentielles par ordre
base de données, recommandé d’optimiser l’extensibilité de priorité
et l’efficacité de tous les serveurs de base
même si vos besoins de données, même si tous vos besoins Identifier les mesures
professionnels professionnels actuels sont satisfaits. à suivre

actuels sont satisfaits. À propos de ce document


Créer ou mettre à jour
L’optimisation des performances sur SQL
Server est une opération ardue. S’il existe la référence
quantité d’informations généralisées sur
divers points de données (compteurs de
Vérifier une amélioration
performances et objets DMO (Dynamic potentielle
Management Object), par exemple), on
trouve en revanche très peu d’informations
concernant l’utilisation de ces données et Modifier un composant
la façon de les interpréter. Ce document (non production)
propose dix conseils importants qui vous
seront utiles sur le terrain et qui vous
permettront de transformer certaines de Exécuter la charge
vos données en informations utilisables de travail
immédiatement.
Effectuer un test des Réinitialiser l’état
performances de départ

Y a-t-il une Non


amélioration ?
Oui
Déployer en
production

Figure 1. Processus d’établissement


d’une base de référence

2
Avant de commencer à apporter des Établissez les standards
modifications, analysez les performances Une fois que vous avez ciblé vos objectifs,
actuelles de votre système. En matière de vous devez déterminer comment vous
réglage et d’optimisation, nombreux sont mesurerez s’ils ont ou non été atteints.
ceux qui sont tentés de tout chambouler Quels sont les compteurs de système
trop vite. Vous est-il déjà arrivé d’aller d’exploitation, compteurs SQL Server,
mesures de ressources et autres points
récupérer votre voiture au garage et de
de données qui vous donnent les
vous demander si elle ne marche pas informations nécessaires ?
moins bien qu’avant ? Vous aimeriez
bien vous plaindre, mais vous n’en êtes
Une fois cette liste établie, vous devez
pas vraiment sûr… Vous pouvez aussi
définir votre base de référence ou les
vous demander si le problème que vous
performances habituelles de votre
croyez avoir est de la faute du mécanicien système par rapport aux critères que
ou s’il est survenu après la réparation. vous avez choisis. Vous devez collecter
Cette situation peut malheureusement
s’appliquer aux performances d’une base
suffisamment de données sur une longue Les tests de
période pour obtenir un échantillon
de données. représentatif des performances du performances vous
système. Une fois ces données collectées,
La lecture de ce document va vous faites une moyenne des valeurs sur aident à distinguer
l’ensemble de la période pour établir votre
donner de nombreuses idées, et vous
aurez envie d’implémenter votre stratégie première base de référence. Après toute les comportements
modification apportée à votre système,
d’établissement d’une base de référence
et de test des performances au plus vite.
vous effectuerez un nouveau test des normaux de ceux
performances et comparerez les résultats
La première étape (qui n’est pas la plus au test d’origine afin de vous rendre qui ne le sont pas.
captivante, mais clairement l’une des compte objectivement des effets de vos
plus importantes) consiste à mesurer les modifications.
performances de votre environnement par
rapport aux critères que vous souhaitez Ne vous concentrez pas uniquement
modifier. sur les valeurs moyennes, tentez aussi
de déceler tout écart par rapport aux
Déterminez vos objectifs. standards. Cela étant, il est important
Avant de modifier quoi que ce soit de bien analyser les valeurs moyennes.
dans votre système, déterminez vos Calculez au moins l’écart type de chaque
compteur pour avoir une indication de la
objectifs. Y a-t-il dans votre contrat SLA
variation dans le temps. Prenons l’exemple
des aspects à prendre en compte en d’un alpiniste à qui l’on dit que le diamètre
matière de performances, de capacités moyen de sa corde de rappel est d’un
ou de consommation des ressources ? centimètre. C’est en toute confiance
Répondez-vous à un besoin actuel lié qu’il se laisse tomber. Il oscille quelques
à la production ? Avez-vous reçu des centaines de mètres au-dessus de gros
plaintes concernant le temps d’accès aux rochers escarpés et sourit béatement.
ressources ? Définissez des objectifs clairs. Puis on lui dit que la section la plus épaisse
de sa corde est de deux centimètres, et
Beaucoup d’entre nous ont de que la plus fine est d’un millimètre. Oups…
nombreuses instances et bases de
données à gérer. Afin d’optimiser nos Si vous ne maîtrisez pas bien la notion
efforts, nous devons soigneusement d’écart type, plongez-vous dans un manuel
prévoir ce dont un système donné a de statistiques pour débutant. Inutile de
besoin pour qu’il fonctionne correctement faire des recherches approfondies, mais
cela vous aidera à comprendre les bases.
et réponde aux attentes des utilisateurs.
Si vous vous investissez trop dans l’analyse
et le réglage, vous risquez de consacrer Pour résumer, ne vous concentrez pas
beaucoup trop de temps aux systèmes uniquement sur les moyennes, examinez
à faible priorité, au détriment de vos également les écarts moyens par rapport
aux standards. Décidez quels doivent être
systèmes de production principaux.
ces standards (c’est généralement dans
Ayez des objectifs clairs et précis en votre contrat SLA que vous trouverez la
termes de réglage et de mesures. Faites réponse). Votre but n’est pas d’obtenir les
de ces points votre priorité. Dans l’idéal, performances les plus élevées possible :
faites-vous aider par un commanditaire il faut les adapter à vos objectifs et limiter
professionnel. les écarts par la suite. Tout le reste n’est

3
que du temps de perdu et pourrait endroit que la base de données que vous
même contribuer à la sous-utilisation surveillez.
des ressources de votre infrastructure.
Limitez le nombre de modifications
Quelle quantité de données faut-il apportées par session.
pour établir une base de référence ? Essayez de limiter le nombre de
La quantité de données nécessaires modifications apportées entre chaque
à l’établissement d’une base de référence test. Faites des modifications visant à
dépend du degré de variation de votre tester une hypothèse en particulier.
charge dans le temps. Consultez vos Cela vous permettra de valider ou non
administrateurs système, utilisateurs chaque amélioration potentielle. En
finaux et administrateurs d’applications, affinant vos réglages, vous comprendrez
ils ont généralement une vision plutôt exactement les raisons de tel ou tel
objective des modèles d’utilisation changement de comportement et vous
à adopter. Vous devez collecter
Votre but n’est suffisamment de données pour couvrir
découvrirez souvent toute une série
d’options d’amélioration potentielle
pas d’obtenir les les périodes creuses, périodes moyennes
et périodes de pointe.
supplémentaires.

performances Analyse des données


Il est important d’étudier la fréquence
les plus élevées et l’écart des variations de la charge. Une fois les modifications apportées à
votre système, vous voudrez savoir si
Les systèmes disposant de modèles
possible : il faut prévisibles nécessitent moins de elles ont eu l’effet souhaité. Pour cela,
données. Plus les variations sont recommencez les mesures effectuées
les adapter à vos importantes, plus l’intervalle entre les pour votre base de référence d’origine
sur une échelle de temps également
objectifs et limiter mesures est faible, et plus vous mettrez
de temps à effectuer les mesures pour représentative. Comparez ensuite les
deux bases de référence pour :
les écarts par établir une base de référence fiable.
Pour faire à nouveau le parallèle avec •  Déterminer si les modifications ont eu
la suite. notre cher alpiniste, plus vous examinez l’effet escompté. Quand vous modifiez les
paramètres de configuration, optimisez un
de longueur de corde, plus vous aurez
de chances de détecter les variations index ou modifiez du code SQL, la base
de diamètre. Le niveau de criticité de référence vous permet de savoir si
du système et l’impact potentiel de vos changements ont eu l’effet souhaité.
ses dysfonctionnements affectent Si vous recevez des plaintes liées à un
également la profondeur de l’examen ralentissement des performances, vous
qu’il doit subir ainsi que le niveau de savez avec certitude si le problème a lieu au
fiabilité que doit avoir l’échantillon. niveau de la base de données.
L’erreur la plus fréquente chez les
administrateurs de base de données manquant
Stockage des données d’expérience consiste à tirer des conclusions
Plus vous suivez de paramètres à des trop hâtives. Il arrive bien souvent qu’un
intervalles réduits, plus le volume de informaticien saute de joie en constatant
données collectées sera important. une amélioration visible des performances
Cela peut sembler évident, mais il faut suite à une ou plusieurs modifications. Il
tenir compte des capacités nécessaires s’emballe, déploie les modifications en
pour stocker les données de vos production et se dépêche d’envoyer à
mesures. Une fois que vous disposez de tout le monde des courriers électroniques
données, il est assez facile d’extrapoler indiquant que le problème est résolu. Cette
la croissance du référentiel dans le joie peut être de courte durée si les mêmes
temps. Si vous prévoyez d’effectuer une problèmes réapparaissent plus tard ou si
surveillance sur une période prolongée, quelque effet secondaire inconnu provoque
pensez à regrouper les données d’autres dysfonctionnements. Bien souvent,
historiques à intervalles réguliers pour ces dysfonctionnements auront des effets
éviter que la taille du référentiel ne encore plus négatifs que le problème original.
devienne trop importante. Quand vous pensez avoir trouvé la solution à
un problème, faites un test et comparez les
Pour ne pas entraver les performances, résultats à votre base de référence. C’est la
il est recommandé de ne pas placer seule façon fiable de vérifier que vous apportez
votre référentiel de mesures au même de réelles améliorations.

4
Déterminer si une modification présente
•   N’hésitez pas à recommencer le processus
des effets secondaires indésirables. Une d’établissement d’une base de référence
base de référence vous permet de constater aussi souvent que nécessaire.
objectivement qu’une modification affecte de Un bon réglage implique un processus
manière imprévue un compteur ou une mesure. scientifique et itératif. Les conseils
Anticiper les problèmes avant qu’ils ne
•   présentés dans ce document donnent
se produisent. En utilisant une base de quelques idées pour démarrer, et c’est
référence, vous pouvez établir des standards de
d’ailleurs leur objectif : vous offrir un
performances précis par rapport aux conditions
bon point de départ. Le réglage des
de charge habituelles. Cela vous permet de
performances est un concept extrêmement
prévoir les problèmes et le moment où ils
personnalisé qui dépend de la conception,
risquent de se déclarer, d’après les tendances
de consommation actuelle des ressources
de la composition et de l’utilisation de
ou sur la base de projections de charges de chaque système.
travail pour des scénarios à venir. Effectuez,
par exemple, une planification des capacités :
en extrapolant, vous pouvez, à partir de la
La méthodologie d’établissement d’une base
de référence et de test des performances
La quantité de
consommation actuelle des ressources par
utilisateur connecté, prévoir quand des goulets
constitue la pierre angulaire d’un réglage
approprié et fiable des performances. Elle
données nécessaires
d’étranglement système se formeront au
niveau des connexions utilisateur.
forme une carte, une référence dont les à l’établissement
différentes étapes doivent  indiquer où aller
Dépanner des problèmes avec plus
•  
d’efficacité. Vous est-il déjà arrivé de passer
et comment s’y prendre, afin de s’assurer d’une base de
de ne pas se perdre en chemin. Une
plusieurs jours et nuits à essayer de résoudre approche structurée permet de disposer référence dépend
un problème lié aux performances de la base
de performances cohérentes au niveau
de données pour finalement vous rendre
de la base de données. du degré de variation
compte qu’il n’avait rien à voir avec cette
dernière ? L’établissement d’une base de
Conseil n° 9 : Les compteurs
de votre charge dans
référence s’avère être un moyen beaucoup
plus rapide pour disculper l’instance de de performances vous donnent le temps.
base de données et cibler la cause réelle rapidement des informations utiles
du problème. Par exemple, supposons une sur les opérations en cours
augmentation subite de la consommation de Raisons de surveiller les compteurs
mémoire. Vous remarquez que le nombre de de performances
connexions augmente de façon exponentielle,
Une question concernant les
bien au-delà de votre base de référence. Vous
performances de SQL Server revient
appelez rapidement votre administrateur
souvent : « quels compteurs dois-je
d’applications, qui vous confirme qu’un
nouveau module a été déployé dans l’eStore.
surveiller ? ». En termes de gestion
Vous comprenez très vite la raison du de SQL Server, il y a deux raisons
problème : c’est le nouveau développeur principales de surveiller les compteurs
fraîchement embauché qui écrit un code de performances :
ne gérant pas les connexions à la base de •  l’accroissement de l’efficacité opérationnelle,
données comme il le devrait. Ça vous parle, •  la prévention des goulets d’étranglement.
je me trompe ? J’imagine que vous avez
en tête d’autres scénarios de ce genre. Bien qu’ayant des points communs, ces
deux motifs vous permettent de choisir
Exclure les éléments qui ne sont PAS facilement un certain nombre de points
responsables d’un problème donné de données à surveiller.
permet de résoudre ce dernier beaucoup
plus rapidement et d’avoir une idée quasi
Surveillance des compteurs de
immédiate de ce qui l’a provoqué. Dans de
nombreux cas, il est possible de comparer
performance pour améliorer l’efficacité
les compteurs système aux compteurs opérationnelle La surveillance
SQL Server afin de savoir si la base de données opérationnelle consiste à suivre l’utilisation
est (ou non) à l’origine d’un problème. Une générale des ressources. Elle permet de
fois les suspects habituels hors de cause, répondre à différentes questions, telles que :
vous pouvez commencer à étudier les écarts •  Le serveur est-il sur le point de manquer
importants par rapport à la base de référence, de ressources (processeur, espace disque,
à collecter les indicateurs correspondants mémoire) ?
et à rechercher la cause réelle du problème. •  La taille des fichiers de données peut-elle
augmenter ?
•  Y a-t-il suffisamment d’espace disponible
pour les fichiers de données de taille fixe ?

5
Vous pouvez utiliser les données pour Pour répondre aux trois questions
dégager des tendances. Par exemple, vous énoncées ci-dessus, il convient
pouvez collecter les tailles de tous les d’observer les compteurs suivants :
fichiers de données afin de dégager une
tendance pour leurs taux de croissance et
prévoir les besoins à venir en termes de
ressources.

Compteur Vous permet de


Surveiller la consommation du processeur sur
Processor\%Processor Time le serveur
LogicalDisk\Free MB Surveiller l’espace disponible sur le(s) disque(s)
Évaluer la croissance du volume de données dans
MSSQL$Instance:Databases\DataFile(s) Size (KB) le temps

Entre chaque test, Memory\Pages/sec Vérifier la pagination, qui indique clairement tout
manque potentiel de ressources mémoire

limitez le nombre Memory\Available MBytes Connaître la quantité de mémoire physique


disponible pour l’utilisation du système

de modifications
Surveillance des compteurs de •  
Les principaux sous-systèmes de
afin d’évaluer performances pour éviter les goulets SQL Server, comme le cache des
d’étranglement tampons et le cache de plan, sont-ils
précisément leurs La surveillance des goulets d’étranglement sains ?
est davantage axée sur tout ce qui touche
effets. aux performances. Les données que
•  La base de données subit-elle une
contention ?
vous collectez contribuent à répondre
à plusieurs questions, telles que :
Pour répondre à ces questions,
•  Y a-t-il un goulet d’étranglement au niveau observez les compteurs suivants :
du processeur ?
•  Y a-t-il un goulet d’étranglement au niveau
des E/S ?

Compteur Vous permet de


Processor\%Processor Time Surveiller la consommation du processeur afin
de détecter tout goulet d’étranglement sur le serveur
(indiqué par une utilisation élevée et soutenue).

High percentage of Signal Wait L’attente de signal est le temps qu’un salarié passe
à attendre la réponse du processeur après une attente
liée à un autre élément (tel qu’un verrou, un loquet
ou une autre forme d’attente). Le délai d’attente de
réponse du processeur indique s’il existe un goulet
d’étranglement.
L’attente de signal est accessible via la commande DBCC
SQLPERF(waitstats) sur SQL Server 2000 ou en
interrogeant sys.dm_os_wait_stats sur SQL Server 2005.
Détecter les goulets d’étranglement du disque :
Physical Disk\Avg. Disk Queue Length
si la valeur dépasse 2, il y a de fortes chances qu’un
goulet d’étranglement ait lieu.

MSSQL$Instance:Buffer Manager\Page Life Évaluer l’efficacité du cache. L’espérance de vie d’une


page correspond à la période (en secondes) pendant
Expectancy
laquelle cette page se trouve dans le cache des
tampons. Une valeur faible indique que les pages sont
rapidement supprimées du cache, ce qui peut réduire
son efficacité.
Déterminer le taux d’accès au cache du plan. Si ce
MSSQL$Instance:Plan Cache\Cache Hit Ratio
taux est faible, cela indique que les plans ne sont pas
réutilisés.
Connaître la durée de blocage des processus. Si
MSSQL$Instance:General Statistics\Processes cette durée est longue, il existe une contention des
Blocked ressources.

6
Conseil n° 8 : La modification des Il est important de noter que définir la
paramètres du serveur vous permet valeur de mémoire maximale n’est pas
d’obtenir un environnement plus uniquement approprié pour les instances
stable. d’un cluster, mais aussi pour celles qui
La modification des paramètres d’un partagent des ressources avec d’autres
produit afin de rendre ce dernier plus applications. Si SQL Server utilise une
stable peut sembler tout sauf intuitive, quantité de mémoire trop importante,
mais dans ce cas, cela fonctionne le système d’exploitation peut réduire
vraiment. En tant qu’administrateur abruptement cette quantité de mémoire
de base de données, votre travail consiste afin de libérer de l’espace pour lui-même
à assurer à vos utilisateurs un niveau de ou pour d’autres applications.
performances cohérent lorsqu’ils font SQL Server 2008 : Dans SQL Server 2008 R2
•  
des demandes de données via leurs et les versions précédentes, les paramètres
applications. Si vous ne changez pas les de mémoire Min et Max limitaient
paramètres indiqués dans ce document, uniquement la quantité de mémoire
utilisée par le pool de mémoires tampons
Un bon conseil
vous risquez d’obtenir des scénarios
provoquant une dégradation subite (plus spécifiquement, ils permettaient
uniquement des allocations de pages
en matière de
des performances au niveau de vos
utilisateurs. Ces options sont facilement
uniques de 8 Ko). En d’autres termes, si vous
exécutiez des processus hors du pool de
dépannage
accessibles dans sys.configurations, qui
présente une liste des configurations
mémoires tampons (procédures stockées qui se résume
étendues, CLR ou autres composants, tels
niveau serveur ainsi que d’autres
informations. L’attribut Is_Dynamic
qu’Integration Services, Reporting Services en trois mots :
ou Analysis Services), vous réduisiez encore
de sys.configurations indique s’il est davantage cette valeur. « éliminer ou
nécessaire de redémarrer l’instance
de SQL Server après une modification
SQL Server 2012 : SQL Server 2012 change
•  
légèrement la donne dans la mesure où
incriminer ».
de configuration. Pour apporter les il comprend un gestionnaire de mémoire
modifications souhaitées, appelez la central. Ce dernier permet désormais
procédure stockée sp_configure avec des allocations multipages, dont des
les paramètres appropriés. pages de données et des plans mis en
cache volumineux dépassant 8 Ko. Cet
Les paramètres mémoire Min et Max espace mémoire inclut à présent certaines
peuvent garantir un certain niveau fonctionnalités CLR.
de performances.
Supposons que nous disposons d’un Deux options serveur peuvent améliorer
cluster Actif/Actif (en l’occurrence, indirectement les performances.
un seul hôte comportant plusieurs Il n’existe aucune option améliorant
instances). Nous pouvons apporter directement les performances, mais il
certaines modifications de configuration y en a deux qui permettent de le faire
qui garantissent le respect des indirectement.
contrats SLA en cas de basculement, les •  Compression par défaut des sauvegardes :
deux instances se trouvant sur un même Cette option indique que les sauvegardes
boîtier physique. sont compressées par défaut. Bien que
cette opération puisse sembler impliquer
des cycles processeur supplémentaires lors
Dans un tel scénario, nous apportons
de la compression, il faut bien comprendre
des modifications aux paramètres
qu’elle implique généralement moins de
de mémoire Min et Max afin de nous
cycles processeur qu’une sauvegarde
assurer que l’hôte physique dispose de décompressée, puisque la quantité de
suffisamment de mémoire pour traiter données écrites sur disque est plus faible.
chaque instance sans avoir à tenter Selon votre architecture d’E/S, définir cette
constamment de réduire la plage de option peut également vous permettre de
travail de l’autre. Il est aussi possible de réduire la contention d’E/S.
modifier la configuration afin d’utiliser •  La deuxième option sera peut-être
certains processeurs pour garantir un divulguée dans un de nos conseils
niveau de performances donné. concernant le cache de plan. Vous allez
devoir patienter un peu pour voir si elle a
été intégrée aux dix conseils de cette liste.

7
Conseil n° 7 : Détectez les requêtes Diagnostic d’un goulet
indésirables dans le cache de plan d’étranglement au niveau
Lorsque vous détectez un goulet du processeur
d’étranglement, vous devez identifier Dans SQL Server, lorsque
la charge de travail qui l’a provoqué. vous constatez un
Cette opération est beaucoup plus facile goulet d’étranglement au niveau
à réaliser depuis SQL Server 2005 et du processeur, la première
l’arrivée des objets DMO. Les utilisateurs
chose à faire est d’identifier les
de SQL Server 2000 et des versions
plus gros consommateurs de
précédentes devront se contenter
d’utiliser le Générateur de profil ou processeur sur le serveur. C’est
le fichier de trace (voir le conseil n° 6 une requête très simple sur
à ce sujet). sys.dm_exec_query_stats :

SELECT TOP 50
La surveillance qs.total_worker_time / execution_count AS avg_worker_time,
des compteurs
substring (st.text, (qs.statement_start_offset / 2) + 1,
(  ( CASE qs.statement_end_offset WHEN -1
de performances THEN datalength (st.text)
ELSE qs.statement_end_offset END
peut vous aider - qs.statement_start_offset)/ 2)+ 1)

à augmenter
*
AS statement_text,

votre efficacité FROM sys.dm_exec_query_stats AS qs


CROSS APPLY sys.dm_exec_sql_text (qs.sql_handle) AS st
opérationnelle et ORDER BY

à éviter les goulets avg_worker_time DESC

d’étranglement.
La partie réellement intéressante de Diagnostic d’un goulet d’étranglement
cette requête est la possibilité d’utiliser au niveau des E/S
l’application croisée ainsi que l’élément La démarche est la même pour un
sys.dm_ exec_sql_text pour obtenir goulet d’étranglement au niveau
l’instruction SQL, afin de pouvoir des E/S :
l’analyser.

SELECT TOP 50
     (total_logical_reads + total_logical_writes) AS total_logical_io,
     (total_logical_reads / execution_count) AS avg_logical_reads,
     (total_logical_writes / execution_count) AS avg_logical_writes,
     (total_physical_reads / execution_count) AS avg_phys_reads,
substring (st.text,
(qs.statement_start_offset / 2) + 1,
     ((CASE qs.statement_end_offset WHEN -1
       THEN datalength (st.text)
      ELSE qs.statement_end_offset END
      - qs.statement_start_offset)/ 2)+ 1)
     AS statement_text,
 *
FROM sys.dm_exec_query_stats AS qs
    CROSS APPLY sys.dm_exec_sql_text (qs.sql_handle) AS st
ORDER BY total_logical_io DESC

8
Conseil n° 6 : Utilisez le Générateur Comment utiliser le Générateur
de profils SQL de profils SQL
Comprendre le Générateur de profils Voici comment utiliser le processus de
SQL Server et les événements étendus collecte de données dans l’analyseur de
Le Générateur de profils est un outil natif performances (Perfmon), puis corréler
fourni avec SQL Server. Il permet de les informations concernant l’utilisation
créer un fichier de trace qui capture les des ressources avec les données sur les
événements survenant dans SQL Server. événements envoyés dans SQL Server :
Ces fichiers de trace peuvent s’avérer 1. Ouvrez Perfmon.
extrêmement précieux pour fournir des 2. Si vous ne disposez pas d’un ensemble de
informations concernant votre charge de collecteurs de données déjà configuré,
travail et les requêtes peu performantes. créez-en un maintenant en utilisant l’option
Ce livre blanc n’a pas pour vocation avancée et les compteurs du conseil n° 9
d’entrer dans les détails de l’utilisation pour vous guider. Ne démarrez pas encore
de cet outil. Pour plus d’informations
sur l’utilisation du Générateur de
l’ensemble de collecteurs de données.
La surveillance
3. Ouvrez le Générateur de profils.
profils SQL Server, consultez le
4. Créez un nouveau fichier de trace en
opérationnelle vous
didacticiel vidéo sur SQLServerPedia.
indiquant des informations détaillées
concernant l’instance, les événements et les
permet de suivre
S’il est vrai que le Générateur de
profils SQL Server devient obsolète
colonnes à surveiller, ainsi que la destination. l’utilisation générale
dans SQL Server 2012 au profit des
5. Démarrez le fichier de trace.
6. Basculez sur Perfmon et démarrez
des ressources.
événements étendus, il faut garder à
l’esprit que ce n’est valable que pour
l’ensemble de collecteurs de données. La surveillance
7. Laissez les deux sessions fonctionner
le moteur de base de données, et non
pour SQL Server Analysis Services.
jusqu’à la capture des données requises. des goulets
8. Arrêtez le fichier de trace du Générateur
Le Générateur de profils donne un de profils. Enregistrez le fichier de trace d’étranglement est
bon aperçu du fonctionnement des
applications en temps réel pour de
puis fermez-le.
9. Basculez sur Perfmon et arrêtez l’ensemble
davantage axée sur
nombreux environnements SQL Server. de collecteurs de données. tout ce qui touche
Ce livre blanc ne détaille pas l’utilisation
10. Ouvrez le fichier de trace récemment
enregistré dans le Générateur de profils. aux performances.
des événements étendus. Pour plus
11. Cliquez sur Fichier, puis importez les
d’informations à ce sujet, consultez
données de performances.
le livre blanc sur l’utilisation des
12. Naviguez jusqu’au fichier de collecte de
notifications et des événements étendus
données, puis sélectionnez les compteurs
SQL Server pour résoudre proactivement de performances souhaités.
des problèmes liés aux performances.
Les événements étendus sont apparus Vous êtes maintenant en mesure de voir
dans SQL Server 2008 et ils ont été mis les compteurs de performances associés
à jour dans SQL Server 2012 pour inclure au fichier de trace du Générateur de profils
davantage d’événements ainsi qu’une (voir Figure 2), ce qui vous permettra
interface utilisateur très attendue. de résoudre le problème de goulet
d’étranglement beaucoup plus rapidement.
Notez que l’exécution du Générateur
de profils nécessite l’autorisation Conseil supplémentaire : La procédure
ALTER TRACE. ci-dessus passe par l’interface client.
Pour économiser des ressources, sachez
que l’utilisation d’un fichier de trace
côté serveur est beaucoup plus efficace.
Pour plus d’informations sur la manière
de démarrer et d’arrêter les fichiers de
trace côté serveur, consultez les manuels
en ligne.

9
L’attribut
Is_Dynamic de
Sys.configurations Figure 2. Vue corrélée des compteurs de performances associés au fichier de suivi
indique s’il est du Générateur de profils

Conseil n° 5 : Configurez les SQL Server à des fins multiples, il sera utile
nécessaire de réseaux SAN en vue d’optimiser les
qu’il ait son propre sous-système d’E/S. Pour
affiner encore davantage les réglages des
redémarrer performances de SQL Server performances, il vous faut tout d’abord des
Les SAN sont des réseaux absolument statistiques.
l’instance de géniaux. Ils permettent d’allouer et de • Créez plusieurs fichiers de données et
gérer le stockage très simplement. Il est
SQL Server après rare que les réseaux SAN soient configurés
groupes de fichiers dans VLDB, afin de
bénéficier d’opérations d’E/S en parallèle.
une modification pour l’optimisation des performances de
SQL Server. En effet, les organisations ont
• Placez les sauvegardes sur des lecteurs
à part (pour des raisons de redondance,
de configuration. généralement recours aux réseaux SAN mais aussi pour réduire la contention
d’E/S avec d’autres volumes au cours des
pour la consolidation des unités de
stockage et la facilité de gestion qu’ils périodes de maintenance).
procurent, mais pas pour les performances.
Pour ne rien arranger, vous n’avez le Collecte des données
plus souvent aucun contrôle direct sur la Bien sûr, vous pouvez utiliser les compteurs
façon dont le provisioning s’effectue sur de disque Windows, qui donnent une
ces réseaux. C’est ainsi que vous vous idée de la façon dont Windows interprète
retrouvez avec un réseau configuré pour la situation (n’oubliez pas d’ajuster
un seul volume logique, sur lequel vous les nombres bruts en fonction de la
devez mettre tous vos fichiers de données. configuration RAID). Les fournisseurs de
réseaux SAN proposent, bien souvent, leurs
Pratiques d’excellence pour la propres données de performances.
configuration de réseaux SAN dans le but
d’améliorer les performances des E/S SQL Server fournit également des
Mettre l’intégralité des fichiers sur un informations d’E/S au niveau des fichiers :
seul volume n’est généralement pas une • Versions antérieures à SQL 2005 :
bonne idée si vous souhaitez optimiser Utilisez la fonction fn_virtualfilestats.
les performances des E/S. Pour vous • Versions ultérieures : Utilisez la
conformer aux pratiques d’excellence, fonction de gestion dynamique
sys.dm_io_virtual_file_stats.
procédez comme suit :
• Placez les fichiers journaux sur un volume à
part, différent de celui contenant les fichiers L’utilisation de cette fonction dans le
de données. Les fichiers journaux sont code suivant vous permet :
écrits presque exclusivement de manière • d’exploiter le débit des E/S pour les
séquentielle et ils ne sont pas lus (à l’exception opérations de lecture et d’écriture ;
des groupes de disponibilité Mise en miroir
de bases de données et Toujours activé). • d’obtenir le débit d’E/S ;
Il est recommandé de toujours configurer • d’obtenir le temps moyen par E/S ;
votre application de façon à permettre des • d’afficher les temps d’attente des E/S.
performances d’écriture rapide.
• Placez l’élément tempdb sur un volume
à part. Tempdb étant utilisé en interne par

10
SELECT db_name (a.database_id) AS [DatabaseName],
     b.name AS [FileName], a.File_ID AS [FileID],
     CASE WHEN a.file_id = 2 THEN ‘Log’ ELSE ‘Data’ END AS [FileType],
    a.Num_of_Reads AS [NumReads],
    a.num_of_bytes_read AS [NumBytesRead],
    a.io_stall_read_ms AS [IOStallReadsMS],
    a.num_of_writes AS [NumWrites],
    a.num_of_bytes_written AS [NumBytesWritten],
    a.io_stall_write_ms AS [IOStallWritesMS],
    a.io_stall [TotalIOStallMS],
     DATEADD (ms, -a.sample_ms, GETDATE ()) [LastReset],
     ( (a.size_on_disk_bytes / 1024) / 1024.0) AS [SizeOnDiskMB],
     UPPER (LEFT (b.physical_name, 2)) AS [DiskLocation] La compression
  FROM sys.dm_io_virtual_file_stats (NULL, NULL) a
   JOIN sys.master_files b
par défaut des
     ON a.file_id = b.file_id AND a.database_id = b.database_id sauvegardes réduit
ORDER BY a.io_stall DESC;
la contention au
niveau des E/S.
Analyse des données Conseils pour le réglage du matériel Si les
Faites particulièrement attention à la fichiers de base de données sont placés
valeur « LastReset » de la requête : correctement et si tous les points d’accès
elle indique à quel moment le service d’objets ont été identifiés et répartis
SQL Server a été démarré pour la dernière sur différents volumes, il est temps de
fois. Les données des objets DMO regarder le matériel de plus près.
n’étant pas conservées, il est nécessaire
de valider toutes celles utilisées à des Le réglage du matériel est un sujet qui
fins de réglage par rapport à la durée dépasse les objectifs de ce document.
de fonctionnement du service, sans Cela étant, je peux partager ici quelques
quoi vous risquez d’obtenir de fausses conseils et pratiques d’excellence qui
suppositions. vous faciliteront la tâche :
•  Lorsque vous créez des volumes à utiliser
En utilisant ces valeurs, vous pouvez avec SQL Server, ne vous servez pas de
rapidement cibler les fichiers la taille d’unité d’allocation par défaut.
SQL Server utilise des extensions de 64 Ko,
responsables de la surconsommation de
prévoyez donc au minimum cette valeur.
bande passante d’E/S, et vous poser des •  Vérifiez si vos partitions sont correctement
questions telles que : alignées. Jimmy May a rédigé un livre
•  Ces E/S sont-elles nécessaires ? blanc très intéressant à ce sujet. Des
Me manque-t-il un index ? partitions mal alignées peuvent réduire les
•  Est-ce une table ou un index d’un fichier qui performances de 30 %.
est la cause du problème ? Puis-je mettre •  Effectuez un test des E/S de votre système
cet index ou cette table dans un autre à l’aide d’un outil tel que SQLIO. Vous
fichier, sur un autre volume ? pouvez aussi visionner un didacticiel
concernant cet outil.

Figure 3. Informations relatives aux E/S au niveau des fichiers à partir de SQL Server

11
Conseil n° 4 : Les curseurs et autres Réglage des requêtes à l’aide de plans
mauvais codes T-SQL ont un impact de requête Certaines instructions T-SQL
négatif sur les applications incorrectes peuvent également apparaître
Exemple de mauvais code sous forme de requêtes inefficaces
n’utilisant pas les index, principalement
Lors d’un précédent emploi, j’ai découvert parce que l’index lui-même est incorrect
ce que je crois être le pire code que j’aie ou manquant. Il est extrêmement
jamais vu dans ma carrière. Le système en important de bien comprendre comment
question a été remplacé depuis longtemps, régler les requêtes à l’aide des plans
mais voici le processus que suivait la de requête.
fonction :
1. Accepter la valeur du paramètre à supprimer. Ce livre blanc n’a pas pour vocation
2. Accepter l’expression du paramètre d’entrer dans les détails à ce sujet,
à supprimer. toutefois, la façon la plus simple consiste
3. Trouver la longueur de l’expression. à transformer les opérations d’analyse en
4. Charger l’expression dans une variable. opérations de recherche. Les opérations
Le Générateur de 5. Effectuer une boucle au niveau de chaque
d’analyse étudient chaque ligne de la
table ou de l’index, aussi sont-elles très
caractère de la variable et vérifier si ce
profils SQL permet caractère correspond à l’une des valeurs à gourmandes en termes d’E/S dans le cas
de tables volumineuses. De leur côté, les
supprimer. Si c’est le cas, mettre à jour la
de bien comprendre variable pour le supprimer. opérations de recherche utilisent un index
pour trouver directement la ligne requise
6. Passer au caractère suivant jusqu’à la
le fonctionnement vérification totale de l’expression. (bien sûr, elles nécessitent un index). Si
vous trouvez des opérations d’analyse
d’applications en Si vous faites la grimace, sachez que nous
sommes deux. Bien sûr, on parle ici de
dans votre charge de travail, il est possible
que des index soient manquants.
temps réel dans quelqu’un ayant tenté d’écrire sa propre
instruction « REPLACE » T-SQL.
de nombreux Il existe quantité de bons ouvrages à ce
sujet, notamment :
environnements Le pire, c’est que cette fonction
était utilisée pour mettre à jour des
•  « Professional SQL Server Execution Plan
Tuning » (Réglage de plans d’exécution dans
SQL Server. adresses dans le cadre d’une routine de
publipostage, et qu’elle était appelée
SQL Server Professionnel), par Grant Fritchey
•  « Professional SQL Server 2012 Internals &
plusieurs milliers de fois par jour. Troubleshooting » (Dépannage et éléments
internes de SQL Server 2012 Professionnel),
par Christian Bolton, Rob Farley, Glenn Berry,
L’utilisation d’un fichier de suivi de Justin Langford, Gavin Payne, Amit Banerjee,
Générateur de profils côté serveur vous Michael Anderson, James Boother et Steven
permet d’afficher la charge de travail de Wort
votre serveur et d’extraire les éléments de •  « T-SQL Fundamentals for Microsoft SQL
Server 2012 and SQL Azure » (Principes
code exécutés fréquemment (c’est d’ailleurs
fondamentaux de T-SQL pour
comme ça qu’a été découvert ce petit bijou). Microsoft SQL Server 2012 et SQL Azure),
par Itzik Ben-Gan

Figure 4. Exemple de plan de requête volumineux

12
Conseil n° 3 : Optimisez la Disposez-vous d’un bon niveau
réutilisation de plans pour obtenir de réutilisation des plans ?
une meilleure mise en cache Certains compteurs de performances
SQL Server de l’objet Statistiques SQL peuvent
Importance de la réutilisation de plans vous indiquer si vous disposez d’une
de requête bonne réutilisation des plans. La formule
ci‑dessous vous donnera le taux de lots
Avant d’exécuter une instruction SQL,
soumis aux compilations.
SQL Server crée un plan de requête qui
définit la méthode utilisée par SQL Server
pour prendre l’instruction logique de la Il est recommandé de maintenir une
requête et l’implémenter en tant qu’action valeur aussi faible que possible. Un taux
physique sur les données. de 1:1 signifie que chaque lot soumis est
compilé et qu’aucune réutilisation de
plan n’est possible.
Cette opération peut nécessiter
d’importantes ressources processeur.
Il est rare que
SQL Server fonctionne plus efficacement
lorsqu’il peut réutiliser des plans de requête
les réseaux SAN
existants au lieu d’en créer un nouveau à soient configurés
chaque exécution d’une instruction SQL.
pour l’optimisation
des performances
(Batch Requests/sec – SQL Compilations/sec) / Batch Requests/sec
de SQL Server.

Problème de mauvaise réutilisation Il arrive fréquemment que le code


d’un plan n’utilise pas d’instructions paramétrées
Il est difficile de détecter précisément préparées. Non seulement le recours
la charge de travail responsable de aux requêtes paramétrées améliore la
la mauvaise réutilisation d’un plan, le réutilisation des plans et le temps de
problème se situant généralement au traitement de la compilation, mais il
niveau du code de l’application client qui réduit également le risque d’attaques
soumet les requêtes (vous risquez donc par injection de code SQL associé
d’avoir à analyser ce code). à l’envoi de paramètres via une
concaténation de chaînes. La figure 5
Pour trouver le code intégré à une montre deux exemples de code. Bien
application client, vous devez utiliser les qu’étant assez limités, ils illustrent
événements étendus ou le Générateur bien la différence entre la formation
de profils. En ajoutant l’événement d’une instruction par le biais d’une
SQL:StmtRecompile dans un fichier concaténation de chaînes et l’utilisation
de trace, vous pouvez savoir quand d’instructions préparées dotées de
un événement de recompilation a lieu paramètres.
(l’événement SP:Recompile a été inclus
pour compatibilité rétroactive, l’occurrence
de recompilation ayant été modifiée pour
passer du niveau de procédure à celui
d’instruction dans SQL Server 2005).

13
Incorrect

Les informations
d’E/S au niveau des
fichiers provenant
de SQL Server
peuvent vous aider Correct
à détecter les fichiers Figure 5. Comparaison entre un code qui crée une instruction par le biais d’une
qui consomment concaténation de chaînes et un code qui utilise des instructions préparées dotées
de paramètres
de la bande
passante d’E/S. Dans l’exemple « incorrect » de la figure 5, Un cache de plan démesuré réduit
SQL Server ne peut pas réutiliser le plan. donc la quantité de pages de données
Si l’un des paramètres avait été un type de pouvant être stockées dans le cache
chaîne, cette fonction aurait pu être utilisée des tampons. D’autres cycles sont alors
pour lancer une attaque par injection de nécessaires pour collecter les données
code SQL. Dans l’exemple « correct », à partir du sous-système d’E/S, ce qui
aucune attaque de ce type n’est possible peut s’avérer très coûteux.
du fait de l’utilisation d’un paramètre.
SQL Server peut donc réutiliser le plan. Conseil n° 2 : Apprenez à lire
le cache des tampons SQL Server
Paramètre de configuration évoqué et réduire le vidage de cache
au conseil n° 8 Pourquoi le cache des tampons
Si vous avez bonne mémoire, vous est-il à prendre en considération ?
vous souvenez qu’au conseil n° 8 (où Le cache des tampons, mentionné
nous parlions des modifications de plus haut, est une zone volumineuse
configuration), il restait un point à aborder. de mémoire que SQL Server utilise
SQL Server 2008 contient un paramètre de pour réduire les besoins en termes
configuration appelé « Optimize for ad hoc d’E/S physiques. Aucune exécution
workloads » (Optimiser pour les charges de requête SQL Server ne lit les
de travail ad hoc), qui indique à SQL Server données directement sur un disque :
de stocker une partie de plan plutôt qu’un les pages de base de données sont
plan complet dans le cache de plan. Cette lues à partir du cache des tampons. Si
fonction s’avère particulièrement utile la page recherchée ne s’y trouve pas,
pour les environnements qui utilisent du une requête d’E/S physique est ajoutée
code Linq ou T-SQL dynamique pouvant à la file d’attente. Ensuite, cette requête
empêcher toute réutilisation du code. reste en attente jusqu’à ce que la page
La mémoire allouée au cache de plan soit extraite du disque.
réside dans le pool de mémoires tampons.

14
Les modifications apportées aux Pour conclure cette partie, j’aimerais faire
données d’une page via une opération de un parallèle avec le monde automobile :
suppression ou de mise à jour s’effectuent beaucoup pensent que l’ABS et autres
également dans le cache des tampons. technologies de freinage assisté devraient
Elles sont ensuite envoyées sur le disque. entraîner une réduction des distances
Ce mécanisme permet à SQL Server de freinage, et qu’il serait de bon ton
d’optimiser les E/S physiques de plusieurs d’augmenter les limitations de vitesse du fait
manières : de la sécurité que procurent ces nouvelles
•   Il est possible de lire et d’écrire de nombreuses technologies. La valeur d’avertissement
pages en une seule opération d’E/S. de 300 secondes (cinq minutes) pour
•  Il est possible d’implémenter la lecture l’espérance de vie des pages est une
anticipée. SQL Server peut détecter que, pour
problématique similaire au sein de la
communauté SQL Server : certains pensent
certains types d’opérations, il pourrait être
qu’il s’agit d’une règle stricte, alors que
utile de lire des pages séquentielles (l’idée d’autres estiment que cette valeur devrait
part du principe qu’après avoir lu la page
demandée, vous risquez de vouloir lire celle
se chiffrer en milliers plutôt qu’en centaines
au vu de l’augmentation des capacités Si les fichiers de base
qui est à côté). de mémoire sur la plupart des serveurs à
l’heure actuelle. Cette différence d’opinions
de données sont
Remarque : La fragmentation de l’index souligne à mon sens l’importance des
lignes de base et le fait qu’il est essentiel
placés correctement
entrave la capacité de SQL Server
à optimiser la lecture anticipée. comprendre en profondeur les niveaux
d’avertissement de chacun des compteurs
et si tous les points
Évaluation de l’état du cache des tampons
de performances dans votre environnement. d’accès d’objets
Deux indicateurs permettent de connaître
l’état du cache des tampons : Vidage de cache ont été identifiés et
Lors de l’analyse d’une table ou d’un
•   MSSQL$Instance:Buffer Manager\Buffer
cache hit ratio : Taux de pages détectées dans index volumineux, chaque page analysée
répartis sur différents
doit passer par le cache des tampons,
le cache par rapport aux pages introuvables
dans ce même cache (les pages devant ce qui implique la suppression de pages volumes, il est
être lues hors du disque). Idéalement, il est
recommandé de conserver une valeur aussi
potentiellement utiles pour faire de la place
à celles qui ne seront vraisemblablement temps de regarder le
élevée que possible. Il est possible que des pas consultées plus d’une fois. Cela a pour
conséquence des E/S élevées, les pages
matériel de plus près.
vidages de cache aient lieu, malgré un taux
d’accès élevé. supprimées devant être à nouveau lues
•   MSSQL$Instance:Buffer Manager\Page à partir du disque. Ce vidage de cache
Life Expectancy : Période pendant laquelle indique généralement que des tables
SQL Server conserve les pages dans le ou des index volumineux sont en cours
cache des tampons avant de les supprimer. d’analyse.
D’après Microsoft, une espérance de vie des
pages supérieure à cinq minutes est tout à Pour connaître les index et les tables qui
fait correcte. Si elle est inférieure, cela peut prennent le plus d’espace dans le cache
indiquer une sollicitation excessive de la des tampons, étudiez l’élément DMV sys.
mémoire (mémoire insuffisante) ou un vidage dm_os_ buffer_descriptors (disponible
de cache. à partir de SQL Server 2005). L’exemple
de requête ci-dessous illustre la manière
d’accéder à la liste

SELECT o.name, i.name, bd.*


 FROM sys.dm_os_buffer_descriptors bd
   INNER JOIN sys.allocation_units a
     ON bd.allocation_unit_id = a.allocation_unit_id
   INNER JOIN
   sys.partitions p
     ON (a.container_id = p.hobt_id AND a.type IN (1, 3))
       OR (a.container_id = p.partition_id AND a.type = 2)
   INNER JOIN sys.objects o ON p.object_id = o.object_id
   INNER JOIN sys.indexes i
     ON p.object_id = i.object_id AND p.index_id = i.index_id

15
des tables ou index qui consomment de wait_ ms indique si des attentes d’E/S
l’espace dans le cache des tampons de ont eu lieu lors de l’extraction de pages
SQL Server : d’index dans le cache des tampons (ce qui
constitue un bon indicateur de présence
d’un modèle d’accès d’analyse).
Vous pouvez également utiliser les
•  Quelles sortes de modèles d’accès sont en
éléments DMV de l’index pour détecter
cours d’utilisation ? Les colonnes range_
les tables ou les index montrant scan_count et singleton_ lookup_count
d’importantes quantités d’E/S physiques. indiquent les types de modèles d’accès qui
sont utilisés sur un index donné.
Conseil n° 1 : Découvrez comment
fonctionnent les index et apprenez La figure 6 illustre les résultats d’une
à repérer ceux qui sont incorrects requête qui répertorie les index par
attente totale PAGE_IO_ LATCH, ce
SQL Server 2012 fournit des informations qui s’avère très utile lorsque l’on essaie
très utiles sur les index, que vous pouvez d’identifier les index provoquant des
obtenir via les objets DMO intégrés goulets d’étranglement au niveau des E/S.
à SQL Server 2005.
L’utilisation d’un Utilisation de l’objet DMO
Utilisation de l’objet DMO sys.dm_db_index_usage_stats
fichier de suivi sys.dm_db_index_operational_stats L’élément sys.dm_db_index_usage_stats
de Générateur L’élément sys.dm_db_index_operational_
stats contient des informations sur les
contient des compteurs pour différents
types d’opérations d’index, ainsi que la
de profils côté E/S bas niveau actuelles, le verrouillage,
l’accrochage et l’activité de méthode
date et l’heure de la dernière exécution
de chaque type d’opération. Utilisez
serveur vous d’accès pour chaque index. Utilisez cet élément DMV pour répondre aux
questions suivantes :
cet élément DMF pour répondre aux
permet d’afficher questions suivantes : •   Comment les utilisateurs utilisent-ils les
•  L’un de mes index est-il fréquemment index ? Les colonnes user_ seeks, user_
sa charge de travail utilisé ? L’un de mes index subit-il une scans et user_lookups peuvent indiquer
contention ? Les colonnes relatives à les types et l’importance des opérations
et d’en extraire l’attente de verrouillage de ligne en msec et utilisateur par rapport aux index.
à l’attente de verrouillage de page en msec
les éléments de indiquent que des attentes sont survenues
•  Quel est le coût d’un index ? La colonne
user_ updates peut indiquer le niveau de
code exécutés dans cet index.
•  L’un de mes index est-il utilisé de manière
maintenance d’un index.
•  Quand a eu lieu la dernière utilisation
fréquemment. inefficace ? Quels index provoquent
actuellement des goulets d’étranglement au
d’un index ? Les colonnes last_* peuvent
indiquer la dernière fois qu’une opération
niveau des E/S ? La colonne page_io_latch_ a eu lieu sur un index.

Figure 6. Index répertoriés par attente totale de l’élément PAGE_IO_LATCH

16
Une espérance
de vie des pages
Figure 7. Index répertoriés par nombre total d’éléments user_seeks inférieure à
cinq minutes
La figure 7 illustre les résultats d’une requête Souvenez-vous bien des dix points peut indiquer
qui répertorie les index par nombre total
d’éléments user_seeks. Pour identifier
suivants quand vous optimisez les
performances de SQL Server :
une sollicitation
les index montrant une forte proportion
d’analyses, utilisez la colonne user_scans. 10. Les tests de performances permettent de excessive de
comparer le comportement des charges de
Cela dit, si vous connaissez le nom d’un
index, ne serait-il pas souhaitable de savoir travail et de détecter tout comportement la mémoire
anormal, puisque vous avez une idée
quelles instructions SQL l’ont utilisé ? Depuis
SQL Server 2005, c’est désormais possible. objective de ce qu’est un comportement (mémoire
normal.
9. Les compteurs de performances vous insuffisante)
Il y a, bien sûr, beaucoup d’autres domaines
liés aux index, comme la consolidation, la
donnent rapidement des informations
utiles sur les opérations en cours. ou un vidage
maintenance et la stratégie de conception.
Si vous souhaitez en savoir plus sur cet aspect
8. La modification des paramètres du serveur
vous permet d’obtenir un environnement
du cache.
essentiel du réglage des performances de plus stable.
SQL Server, consultez le site SQLServerPedia, 7. Les objets DMO vous permettent d’identifier
ainsi que certains des livres blancs ou des rapidement les goulets d’étranglement.
webcasts Dell traitant du sujet. 6. Apprenez à utiliser les fichiers de trace,
les événements étendus et le Générateur
Conclusion de profils SQL.
Bien sûr, ces dix points ne sont qu’une 5. Les réseaux SAN sont bien davantage que
mise en bouche face aux innombrables de simples boîtes noires exécutant des E/S.
informations à connaître sur les 4. Les curseurs et autres éléments T-SQL
performances de SQL Server. Toutefois, ce incorrects reviennent fréquemment
livre blanc offre un bon point de départ ainsi surcharger les applications.
que des conseils pratiques sur l’optimisation 3. Optimisez la réutilisation d’un plan pour
des performances de votre environnement obtenir une meilleure mise en cache
SQL Server. SQL Server.
2. Apprenez comment lire le cache des
tampons SQL Server et comment réduire
le vidage de cache.

… et le conseil n° 1 pour optimiser les


   performances de SQL Server :
1. Maîtrisez l’indexation en apprenant
comment les index sont utilisés et comment
détecter les index incorrects.

17
Appel à l’action
Je suis sûr que vous avez hâte de
mettre en pratique ce que vous
venez d’apprendre dans ce livre
blanc. Le tableau ci-dessous répertorie
les actions qui vous permettront
de vous lancer dans l’optimisation
de l’environnement SQL Server :

Action Sous-tâches Date cible


Obtenir une approbation Contactez votre supérieur hiérarchique et argumentez
pour commencer le projet en lui disant que ce projet vous permettra de devenir
proactif plutôt que réactif.
Identifier les objectifs Contactez les parties prenantes de l’entreprise pour
de performances
déterminer les niveaux acceptables de performances.

Non seulement Établir une base de référence


pour les performances
Collectez les données appropriées et stockez-les
dans un référentiel tiers ou personnalisé.
le recours du système
Identifier les principaux
aux requêtes compteurs de performances
et configurer les fichiers de
Téléchargez l’outil de publication de compteur
Perfmon Dell.

paramétrées trace et/ou les événements


étendus

améliore la Vérifier les paramètres


du serveur
Faites particulièrement attention aux paramètres
« Optimiser pour les charges de travail ad hoc »
réutilisation des et de mémoire.
Au besoin, contactez vos administrateurs de
plans et le temps Vérifier le sous-système d’E/S
réseau SAN et pensez à effectuer des tests de charge
au niveau des E/S à l’aide d’outils comme SQLIO.
de traitement de Sinon, déterminez simplement le débit auquel
vous pouvez effectuer des opérations de lecture
la compilation, mais et d’écriture intensive, comme les sauvegardes.
Analysez les données renvoyées par les fichiers de
il réduit également Identifier les requêtes
peu performantes
trace, les sessions d’événements étendus et le cache
de plan.
le risque d’attaques Refactoriser le code Consultez les dernières pratiques d’excellence
peu performant sur le service de blog de SQLServerPedia.
par injection Assurez-vous que vos index sont aussi optimisés
Maintenance des index
de code SQL que possible.

associé à l’envoi
de paramètres via
une concaténation
de chaînes.

18
Informations supplémentaires DELL N’ASSUME AUCUNE RESPONSABILITÉ QUELLE QU’ELLE
© 2013 Dell Inc. TOUS DROITS RÉSERVÉS. Ce document SOIT ET N’ACCORDE AUCUNE GARANTIE EXPRESSE, IMPLICITE
contient des informations propriétaires protégées par des OU LÉGALE QUANT À SES PRODUITS, Y COMPRIS, MAIS SANS
droits d’auteur. Le présent document ne peut en aucun cas être S’Y LIMITER, LA GARANTIE IMPLICITE D’ADAPTATION À UN
reproduit ni transmis sous quelque forme que ce soit, ou par USAGE PARTICULIER, DE QUALITÉ MARCHANDE OU D’ABSENCE
quelque moyen que ce soit (électronique, mécanique, y compris DE CONTREFAÇON. LA SOCIÉTÉ DELL NE PEUT EN AUCUN
par photocopie et par enregistrement), à quelque fin que ce soit, CAS ÊTRE TENUE RESPONSABLE DE DOMMAGES DIRECTS,
sans l’autorisation écrite de Dell Inc. (« Dell »). INDIRECTS, CONSÉCUTIFS, PUNITIFS, SPÉCIAUX OU FORTUITS
(NOTAMMENT, MAIS SANS S’Y LIMITER, CEUX DÉCOULANT
Dell, Dell Software, ainsi que le logo et les produits Dell Software, D’UNE PERTE DE BÉNÉFICES, D’UNE INTERRUPTION D’ACTIVITÉ
tels qu’ils sont identifiés dans le présent document, sont des OU D’UNE PERTE D’INFORMATIONS) ATTRIBUABLES À
marques déposées de Dell, Inc. aux États-Unis et/ou dans d’autres L’UTILISATION OU À L’IMPOSSIBILITÉ D’UTILISER LE PRÉSENT
pays. Toutes les autres marques et marques déposées sont la DOCUMENT, MÊME SI DELL A ÉTÉ AVERTIE DE L’ÉVENTUALITÉ
propriété de leurs détenteurs respectifs. DE TELS DOMMAGES. Dell ne se soumet à aucune déclaration
ou garantie quant à l’exactitude ou l’exhaustivité du contenu
du présent document et se réserve le droit de modifier les
Les informations contenues dans ce document sont fournies
spécifications et les descriptions de produits à tout moment et
en relation avec les produits Dell. Aucune licence, expresse ou
sans préavis. Dell ne s’engage pas à mettre à jour les informations
implicite, par préclusion ou autre, sur tout droit de propriété
contenues dans le présent document.
intellectuelle n’est accordée par ce document ou en relation
avec la vente de produits Dell. SOUS RÉSERVE DES EXCEPTIONS
PRÉVUES PAR LES CONDITIONS GÉNÉRALES DELL SPÉCIFIÉES
DANS LE CONTRAT DE LICENCE DE CE PRODUIT,

À propos de Dell
Dell Inc. (NASDAQ : DELL) est à l’écoute de ses clients
et propose une technologie innovante disponible partout
dans le monde, ainsi que des solutions et des services
professionnels reconnus pour leur fiabilité et leur qualité.
Pour tout complément d’information,
rendez-vous sur www.dell.com

En cas de questions sur l’utilisation de ce document,


nous vous invitons à contacter :

Dell Software
5 Polaris Way
Aliso Viejo, CA 92656
www.dell.com
Veuillez vous rendre sur notre site Web pour obtenir
nos coordonnées à l’échelle régionale et internationale.

Whitepaper-TenTips-OptimSQL-US-KS-2013-04-03

S-ar putea să vă placă și