Traitement de requêtes en parallèle

SQL Server permet les requêtes en parallèle afin d'optimiser leur exécution et les opérations d'index sur les ordinateurs dotés de plusieurs processeurs (ou unités centrales). Comme SQL Server peut exécuter une requête ou une opération d'index en parallèle à l'aide de plusieurs threads du système d'exploitation, l'opération peut être exécutée rapidement et efficacement.

Durant l'optimisation, SQL Server recherche les requêtes ou les opérations d'index qui pourraient tirer profit d'une exécution en parallèle. Pour ces requêtes, SQL Server insère des opérateurs d'échange dans le plan d'exécution de la requête afin de la préparer à l'exécution en parallèle. Un opérateur d'échange est un opérateur dans un plan d'exécution de requêtes qui assure la gestion du processus, la redistribution des données et le contrôle de flux. L'opérateur d'échange inclut les opérateurs logiques Distribute Streams, Repartition Streams, et Gather Streams comme sous-types, qui peuvent apparaître dans la sortie Showplan du plan de requête d'une requête parallèle.

Une fois les opérateurs d'échange insérés, vous obtenez un plan d'exécution de requêtes en parallèle. Un plan d'exécution de requêtes en parallèle peut utiliser plusieurs threads. En revanche, un plan d'exécution en série, qui porte sur une requête non parallèle, n'utilise qu'un seul thread pour son exécution. Le nombre réel de threads utilisés par une requête parallèle est déterminé au moment de l'initialisation de l'exécution du plan de requête et dépend de la complexité et du degré de parallélisme du plan. Le degré de parallélisme détermine le nombre maximal d'unités centrales utilisées ; il n'indique pas le nombre de threads employés. La valeur du degré de parallélisme est définie au niveau du serveur et peut être modifiée par le biais de la procédure stockée système sp_configure. Cette valeur peut être remplacée pour les instructions de requête ou d'index individuelles en spécifiant l'indicateur de requête MAXDOP ou l'option d'index MAXDOP.

L'optimiseur de requête SQL Server n'utilise pas de plan d'exécution parallèle pour une requête si l'une des conditions suivantes est vraie :

  • Le coût d'une exécution en série n'est pas assez élevé pour envisager à la place un plan d'exécution parallèle.

  • Un plan d'exécution en série est considéré comme plus rapide que n'importe quel plan d'exécution parallèle envisageable pour la requête particulière.

  • La requête contient des opérateurs scalaires ou relationnels qui ne peuvent être exécutés en parallèle. Certains opérateurs peuvent entraîner l'exécution d'une section du plan de requête ou de la totalité du plan en mode série.