Lorsqu’il s’agit d’optimiser les performances de SQL Server, l’un des types d’attente les plus courants auxquels les administrateurs de bases de données sont confrontés est le type d’attente CXPACKET. Ce type d’attente est souvent en tête de liste lors de l’interrogation de sys.dm_os_wait_stats sur des serveurs où le paramètre MDOP (Max Degree of Parallelism) est configuré pour autre chose que ‘1’.
Alors, qu’est-ce que CXPACKET exactement et comment cela fonctionne-t-il? Selon Microsoft, les attentes CXPACKET se produisent avec des plans de requête parallèles lors de la tentative de synchronisation de l’itérateur d’échange du processeur de requête. En termes plus simples, lorsqu’une requête génère un plan parallèle et que la charge de travail est répartie entre plusieurs threads, le temps d’attente CXPACKET est enregistré par le thread principal (Thread 0) en tant que temps nécessaire pour que le dernier thread termine son travail.
Il est important de noter que les attentes CXPACKET ne sont pas nécessairement un problème. Elles indiquent simplement que le parallélisme est utilisé. Cependant, si la charge de travail n’est pas répartie uniformément entre les threads, cela peut être un signe de problèmes de parallélisme. Pour garantir un parallélisme optimal, il est crucial que la charge de travail soit répartie uniformément entre les threads disponibles.
Il existe quelques façons de réduire les attentes CXPACKET. Tout d’abord, il est important de ne pas paniquer et de désactiver complètement le parallélisme. La désactivation du parallélisme peut avoir un impact négatif sur les requêtes qui bénéficient de l’utilisation d’un plan parallèle. Au lieu de cela, il est recommandé de revoir le paramètre MDOP. Par défaut, SQL Server définit la valeur MDOP à ‘0’, ce qui permet à tous les ordonnanceurs disponibles d’être utilisés par les plans parallèles. Cependant, l’utilisation de plus de 8 ordonnanceurs peut entraîner des rendements décroissants. Microsoft recommande de définir la valeur MDOP à 8 pour les serveurs avec plus de 8 cœurs, et à 0 à N (où N est le nombre de cœurs) pour les serveurs avec 8 cœurs ou moins.
Un autre facteur à prendre en compte est le “Seuil de coût pour le parallélisme”. Ce paramètre détermine le coût à partir duquel une requête a une chance de générer un plan parallèle. La valeur par défaut est ‘5’, ce qui est relativement faible et peut entraîner la génération de plans parallèles pour des requêtes qui fonctionneraient mieux avec un plan sériel. Il est important de comprendre votre charge de travail avant de modifier ce paramètre et d’analyser le cache des plans pour les plans parallèles afin de déterminer le “Seuil de coût pour le parallélisme” optimal pour votre système.
En conclusion, les attentes CXPACKET dans SQL Server ne sont pas nécessairement un problème. Il est important d’analyser votre charge de travail et de prendre des décisions éclairées concernant les paramètres MDOP et “Seuil de coût pour le parallélisme” afin d’optimiser l’utilisation du parallélisme pour votre système. Il n’est pas recommandé de désactiver complètement le parallélisme, car cela peut avoir un impact négatif sur les requêtes qui bénéficient de l’exécution parallèle.