Blog

Power Options : Surconsommation du CPU d’une instance SQL Server


Contexte

De la réplication transactionnelle a été mise en place pour de la répartition de charge en lecture entre 5 abonnés à l’arrivée. Curieusement, dans l’outil de monitoring, on observe qu’un des serveurs abonnés sur les 5, consomme 20% de CPU en plus de manière continue. En interrogeant la DMV sys.dm_exec_procedure_stats sur l’abonné en question, même constat : les PS surconsomment en CPU avec les mêmes paramètres d’entrée. Or, les données sont semblables d’un abonné à l’autre. Au niveau du load balancer, le poids de répartition est équitable entre les 5 abonnées. La configuration matérielle est strictement identique d’un abonné à l’autre, idem au niveau de l’instance SQL Server. Après une journée d’investigation (relevé de conf, traces, etc), je fini par soumettre le problème à David Barbarin. Après lui avoir exposé le phénomène, il me demande de vérifier le mode de gestion de l’alimentation sur le serveur abonné en cause et de le comparer à un autre. Le serveur qui surconsomme en CPU utilise le mode « Balanced » contrairement à l’autre qui est positionné sur « High Performance ».

Expert SQL Server - Power Options : Surconsommation du CPU d'une instance SQL Server - SQL Server  - power_option

Je bascule donc sur le mode High Performance et instantanément le CPU retrouve une utilisation équivalente aux autres abonnés, -20% d’un coup.

Mode de gestion de l’alimentation, kezako ?

C’est un ensemble de paramètres matériels et système qui permettent de gérer l’utilisation et l’économie d’énergie. Il permet en outre de gérer l’intégralité des options d’alimentation (ex : disque). Il est tout à fait possible de créer des modes de gestion de l’alimentation personnalisés pour des besoins spécifiques.

Plusieurs plans sont prédéfinis :

– Balanced (par défaut)

– High Performance (à privilégier)

– Power Saver

Pour revenir à mon problème, en quoi le mode « Balanced » est-il néfaste ? Pour faire simple, ce mode gère différent états du processeur à des fins d’économie d’énergie. Le passage d’un état à un autre augmente le temps de réponse du CPU et génère une surconsommation. Il est donc nécessaire d’utiliser le mode « High Performance » pour éviter ce type d’écueil sur un serveur qui héberge une instance SQL Server.

Attention : il ne suffit pas de changer ce mode au niveau de l’OS, il existe d’autres granularités :

OS

Comme on l’a vu précédemment, on peut passer par le panneau de configuration, Control Panel\Hardware\Power Options, pour modifier le mode de gestion d’alimentation mais aussi utiliser une méthode plus industrialisée telle que Powershell quand ça concerne un grand nombre de serveurs :

Hyperviseur

Si l’instance est hébergée sur une VM, l’option doit être activée sur le Host. VMWare utilise le mode High Performance par défaut.

Expert SQL Server - Power Options : Surconsommation du CPU d'une instance SQL Server - SQL Server  - vmware_poweroption

BIOS

Cette option de gestion d’alimentation est également disponible dans le BIOS, attention elle prévaut sur celle de l’OS sauf si on la désactive.

Expert SQL Server - Power Options : Surconsommation du CPU d'une instance SQL Server - SQL Server  - bios_poweroption

Auteur

Expert SQL Server - Power Options : Surconsommation du CPU d'une instance SQL Server - SQL Server  - avatar_ninja_tete-150x150
Sarah Bessard
Experte SQL Server Prod/Etude avec un bonus sur la BI, les maîtres mots sont : performance, industrialisation, méthodologie & bonne humeur. Besoin d'une expertise SQL Server ? N'hésitez pas à me contacter.

Leave a comment

Your email address will not be published.

error: