SQL Server 2000 était connu pour gérer de manière imparfaite le parallélisme dans le cas des processeurs hyperthreadés. Je ne suis pas sûr que SQL Server 2005 s’améliore beaucoup de ce point de vue, mais je n’ai pas eu l’occasion de tester ce type de configuration sur 2005.
Exécuter une requête sur plusieurs processeurs simultanément reste une décision qui parfois peut se révéler délicate. SQL Server fait ce choix par rapport à la charge actuelle des différents CPU, selon sont estimation du coût estimé de la requête. Si les processeurs sont peu chargés et la requête paraît coûteuse, SQL Server peut choisir de paralléliser certaines opérations. Evidemment, le gain est plus effectif sur des systèmes qui exécutent peu de requête, de grands volumes. Par contre, plus le serveur doit supporter la concurrence, moins le parallélisme est approprié : des CPUs occupés à servir la même requête sont indisponibles pour servir les demandes entrantes.
Si vous voulez augmenter la limite de coût qui peut déclencher une parallélisation, changez l’option de serveur cost threshold for parallelism , en indiquant un coût estimé en secondes :
sp_configure 'show advanced options', 1;
reconfigure;
GO
sp_configure 'cost threshold for parallelism', 10;
reconfigure;
GO
Pour placer la limite à 10 secondes.
Pour modifier le nombre de processeurs qui pourront être utilisés pour une seule requête :
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'max degree of parallelism', 1
RECONFIGURE
Cette commande, par exemple, annule tout parallélisme en ne permettant à SQL Server de n’utiliser qu’un seul processeur.
Vous pouvez également limiter le parallélisme par requête, en utilisant une option de requête :
SELECT * FROM ...
OPTION(MAXDOP 1)