Bonjour a tous,
Je me trouve confronter a un problème assez perturbant.
Lorsque je me suis lancé dans l’étude d’un problème de performance remonté ce matin par les utilisateurs sur une application j’ai constaté un phénomène assez surprenant : la requête directement impliqué dans cette chute de performance (conséquente) ne parallélise pas sur mon environnement de production alors qu’elle parallélise parfaitement dans l’environnement de pré-Production.
Afin d’évacuer toute fausse piste je précise les éléments suivants :
L’environnement de Pré-Production et l’environnement de Production sont d’un point de vu machine physique les mêmes pour ce qui est des disques et de la CPU, le serveur de production a été gonflé en RAM (24Go en Production, 16Go en Pré-Production).
La base de données de l’environnement de pré-Production est une restauration de la base de production datant de moins d’un mois.
La reconstruction des indexes et la mise à jours des statistiques sont effectuer sur cette base chaque soir dans les 2 environnements et se sont correctement effectué la nuit dernière.
Enfin les plan d’exécution de la requête récupérés sur les 2 environnements sont les mêmes, au parallélisme prêt, avec des couts très similaires aux même étapes (comparaison effectué avec SQL Sentry Plan Explorer).
Fort de ces éléments j’ai évidement immédiatement comparé les paramètres de parallélisassions des requêtes pour les instances, la seule différence entre les 2 était le MAXDOP, a 0 sur le serveur de Pré-Production et a 16 (le nombre de cœurs de CPU pour la machine) sur le serveur de Production. Histoire d’être totalement cohérent j’ai positionné le MAXDOP à 16 sur le serveur de Pré-Production.
Le comportement est toujours le même.
J’ai bien évidement chercher sur le net, dans les msdn et autres blog des informations concernant le choix ou non par le moteur d’utiliser la parallélisassions pour les requêtes et il me semble qu’aucun facteur empêchant son utilisation ne soit a l’œuvre sur mon serveur de production.
Je suis donc perplexe et mes utilisateurs sont agacés (il semble que le problème ne survienne que depuis ce matin ce qui indiquerais que jusqu'à vendredi au moins le moteur parallélisait correctement la requête) par un temps de réponse fortement dégradé (2 secondes en Pré-Production pour rendre prêt de 23000 lignes, plus de 4 minutes en Production pour rendre prêt de 5000 lignes, interrompu avant la fin puisque requête trop lente et trop pénalisante pour les autres utilisateurs).
Merci de toute l’aide que vous pourrez m’apporter dans ma recherche d’explication et de solution.
Partager