SQL Server 2016 : Maintenance des progiciels tiers

Gérer le parallélisme

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Parcourez les options du serveur permettant de mieux gérer le parallélisme et de diminuer la charge des processeurs sur certains serveurs.
07:26

Transcription

Nous voici de retour dans SQL Server. Je vais directement au niveau de l'instance, clic-droit, « Propriétés ». Et nous allons voir les quelques options qui influencent le parallélisme et Numa. Premièrement, est-ce que ma machine a des nœuds Numa ? Pour cela, je vais dans « Processeurs » et je regarde ici les processeurs qui sont détectés par « SQL server » et je vois « NumaNode0 », ici. Et je ne vois pas « NumaNode1 » en dessous, ça veut dire que cette machine n'est pas en architecture « Numa ». Entre parenthèses, si vous êtes sur une machine virtuelle genre Vmware, eh bien, peut-être que le fait que le host soit en Numa vous est caché ici. Donc la problématique est différente. Mais admettons, je suis sur une machine physique et je vois que j'ai huit processeurs sur un seul nœud Numa, donc je n'ai pas particulièrement de problématique Numa. Mais si vous avez NumaNode1, regardez le nombre de processeur dans un nœud, c'est toujours le même hein, le NumaNode0 et le NumaNode1 auront le même nombre de processeurs et notez bien, ici j'ai huit processeurs. Si vous êtes sur une version antérieure à SQL server 2008, parce que cet affichage sous forme de nœud Numa est, alors de mémoire né en SQL Server 2008 ou 2008R2, mais si vous n'avez pas cette affichage, eh bien, faites une requête assez simple « SELECT * FROM sys.dm_os_schedulers ». Les schedulers, ce sont des ordonnanceurs de tâches internes qui vont gérer justement les processeurs, il va y avoir un scheduler par processeur. Donc je lance la requête et je vois ici que on est à « VISIBLE ONLINE », j'ai huit processeurs, huit schedulers qui sont sur des « cpu_id » de 0 à 7. Donc j'ai bien huit schedulers sur huit processeurs. Restez uniquement sur le statut « VISIBLE ONLINE », ce sont des schedulers qui sont liés au processeur. Et vous voyez ici qu'on a un « parent_node_id » qui est à zéro pour tous mes schedulers. Si vous aveiz un « parent_node_id » zéro et un, ça veut dire que vous auriez deux nœuds Numa. Le « parent_node_id » c'est l' « id » du nœud Numa, ok ? C'est une façon aussi de voir cette information. Je reviens dans mes propriétés. Donc je sais que j'ai huit processeurs dans un seul nœud Numa, je vais aller maintenant dans la section avancée et regarder ici les options du parallélisme. Il y a deux options qui nous intéressent : le « Degré maximum du parallélisme » qui est ici, et le « Seuil de coût ». Alors il faut que je vous explique tout ça. Le seuil de coût d'abord. Lorsque « SQL server » battit un plan d'exécution, il va estimer son coût en nombre de seconde. Ce sont des secondes qui correspondent à des secondes d’exécution sur une vieille machine de test qui ne doit plus exister et qui était utilisée lors du développement de SQL server 7 pour mesurer le coût d'un plan d'exécution. Donc, c'est juste une valeur. Ici c'est cinq, ça veut dire que si le plan d'exécution généré pour une requête est estimé par SQL server à plus de cinq en termes de coût, eh bien, il peut être considéré pour du parallélisme. Le problème c'est qu'aujourd'hui, cinq c'est une valeur qui est beaucoup trop basse. Une requête qui coûte cinq va s'exécuter très rapidement, elle n'a pas besoin de profiter de plusieurs processeurs. Donc vous pouvez tout à fait l’augmenter à 12 ou à 15 par exemple, ça va diminuer le nombre de requêtes qui vont utiliser plusieurs processeurs. Vous allez me dire : « mais pourquoi diminuer ce nombre de requête ? Est-ce que ce n’est pas bien plutôt de les faire s'exécuter sur plusieurs processeurs ? » Eh bien, pas forcément parce que utiliser plusieurs processeurs ça veut dire avoir une gestion de plusieurs threads dans la requête, ce qui est plus compliqué, il faut échanger des données. En plus, on va utiliser plusieurs processeurs, alors qu’on pourrait les laisser à disposition pour d'autres requêtes qui passent en même temps. Finalement, si vous avez un serveur qui doit exécuter en permanence beaucoup de petites requêtes, il vaut mieux faire moins de parallélisme pour que les processeurs soient plus disponibles pour les requêtes qui arrivent. Donc 15 par exemple, c'est un bon chiffre. Ensuite le « Degré maximum de parallélisme », c'est une valeur qu'on appelle dans le jargon SQL server le « MaxDOP », « Maximum Degree Of Parallelism ». Si vous voyez passer MaxDOP, en un mot vous comprenez que c'est ça. C'est le nombre de processeurs qui vont pouvoir être utilisés pour une requête parallélisée. Et la valeur zéro qui est la valeur par défaut ici indique potentiellement tous les processeurs, c'est-à-dire les huit processeurs que j'ai sur ma machine. Et souvent, SQL server va choisir tous les processeurs. Il peut en utiliser seulement quelques-uns ou prendre tous les processeurs mais souvent il va assez loin dans son choix. Imaginez que vous avez une machine avec 24 processeurs et vous laissez ceci à zéro. Tout à coup, une requête peut tous les utiliser, ça va diminuer les performances parce qu’il va falloir échanger des données entre ces différents threads à la fin de la requête ou peut-être au début. Et les processeurs vont être utilisés au lieu de pouvoir répondre à d’autres requêtes qui arrivent. Laisser cette valeur à zéro quand vous avez plus de huit processeurs par exemple, ce n'est pas du tout une bonne idée. De toute façon, la recommandation Microsoft est de ne pas dépasser huit, donc ici je vais mettre huit. Ce qui ne sert à rien dans mon exemple mais on va changer ça. Ça ne sert à rien ici puisque j'ai déjà huit processeurs, donc c'est équivalent à zéro bien sûr. Donc ne dépassez jamais huit et si vous vous apercevez que vous avez des nœuds Numa comme on vient de le voir, il ne faut pas dépasser le nombre de processeurs dans un nœud Numa. De cette façon, SQL Server ne parallélisera jamais une requête sur plusieurs nœuds Numa. Ça aussi d'ailleurs, c'est une recommandation Microsoft. Si vous avez une machine où vous voyez que les processeurs sont à 70, 80% et que vous pensez que vous avez des requêtes assez lourdes qui vont utiliser du parallélisme, eh bien, essayez de diminuer cette valeur, mettez-la par exemple à quatre. Vous avez par exemple huit processeurs ou 16 processeurs, essayez quatre. Essayez peut-être deux et en fait vous ne risquez rien parce que dès que vous changez cette valeur, ce sera pris en compte à chaud, vous verrez les résultats tout de suite et si vous n'êtes pas satisfait vous pouvez revenir en arrière, vous pouvez changer cette valeur comme vous voulez, il n'y aura pas d'impact sur les requêtes de production, sauf leur rapidité, mais ça ne va pas faire exploser du code et puis vous pourrez revenir en arrière une minute plus tard sans que vous ayez besoin de redémarrer quoique ce soit ça sera vraiment pris en compte à chaud et vous pouvez être très souple sur cette valeur. Par exemple sur des serveurs de production où je vois passer beaucoup de petites requêtes, eh bien, il m'arrive souvent de mettre soit quatre, soit deux, j'essaye un peu pour voir ce que ça donne. Soit si je veux désactiver totalement le parallélisme parce qu'il me semble que ça pose problème, eh bien, je le mets à un, ce qui interdit tout parallélisme sur les requêtes. Regardez cette option et essayez-là si vous avez un serveur où l'activité processeur est importante, par exemple 80%, mettez-le à un et regardez ce que ça fait, ça peut très, très bien diminuer la charge des processeurs et augmenter la performance des requêtes, vous le verrez aux ressentis utilisateurs ou en utilisant le profiler.

SQL Server 2016 : Maintenance des progiciels tiers

Exploitez les fonctionnalités de SQL Server afin de diminuer les problèmes, et améliorer les performances des progiciels. Faites face à ce problème très souvent rencontré !

1h16 (15 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :4 août 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !