Opérations d'index parallèles

Les plans de requête générés pour les opérations d'index qui créent ou régénèrent un index, ou suppriment un index cluster, autorisent les opérations multithread parallèles sur des ordinateurs dotés de plusieurs microprocesseurs.

Notes

Les opérations d'index parallèles sont uniquement disponibles dans SQL Server 2008 Enterprise.

SQL Server utilise les mêmes algorithmes pour déterminer le degré de parallélisme (le nombre total de threads séparés à exécuter) des opérations d'index, comme il le fait pour les autres instructions Transact-SQL. Le degré maximal de parallélisme pour une opération d'index est fonction de l'option de configuration de serveur max degree of parallelism. Vous pouvez remplacer la valeur de max degree of parallelism pour des opérations d'index particulières en définissant l'option d'index MAXDOP dans les instructions CREATE INDEX, ALTER INDEX, DROP INDEX et ALTER TABLE.

Lorsque le Moteur de base de données génère un plan d'exécution d'index, le nombre d'opérations parallèles est défini sur la valeur la plus faible parmi les suivantes :

  • nombre d'UC dans l'ordinateur ;

  • nombre spécifié dans l'option de configuration de serveur max degree of parallelism ;

  • nombre de processeurs (UC) ne dépassant pas déjà un seuil de travail effectué pour les threads de SQL Server.

Par exemple, sur un ordinateur doté de 8 UC, mais où max degree of parallelism a la valeur 6, pas plus de six threads parallèles sont générés pour une création d'index. Si cinq des UC de l'ordinateur ont déjà dépassé le seuil de travail SQL Server lors de la création d'un plan d'exécution d'index, ce dernier spécifie uniquement trois threads parallèles.

Les phases principales d'une opération d'index parallèle sont les suivantes :

  • Un thread de coordination analyse rapidement et de façon aléatoire la table pour évaluer la distribution des clés d'index. Le thread de coordination établit les limites des clés qui créeront un nombre de plages de clés égal au degré d'opérations parallèles, où chaque plage de clés est évaluée pour couvrir des nombres de lignes similaires. Par exemple, si la table comporte quatre millions de lignes, et que le degré de parallélisme est de 4, la thread de coordination détermine les valeurs de clé qui délimitent quatre ensembles de lignes avec un million de lignes dans chaque ensemble. Si un nombre suffisant de plages de clés ne peut être établi pour l'utilisation de toutes les UC, le degré de parallélisme est réduit en conséquence.

  • Le thread de coordination répartit un nombre de threads égal au degré d'opérations parallèles, et attend que ces threads terminent leur travail. Chaque thread analyse la table de base en utilisant un filtre qui extrait uniquement les lignes avec des valeurs de clé situées dans la plage affectée au thread. Chaque thread construit une structure d'index pour les lignes contenues dans sa plage de clés. Dans le cas d'un index partitionné, chaque thread génère un nombre spécifié de partitions qui ne sont pas partagées entre les threads. Pour plus d'informations sur la génération d'un index, consultez tempdb et création d'index.

  • Une fois que tous les threads parallèles ont été exécutés, le thread de coordination connecte les sous-unités d'index dans un index unique. Cette phase s'applique uniquement aux opérations d'index hors ligne.

Les instructions CREATE TABLE ou ALTER TABLE individuelles peuvent avoir plusieurs contraintes imposant la création d'un index. Ces opérations de création d'index multiples sont exécutées en série, bien que chaque opération de création d'index individuelle puisse être une opération parallèle sur un ordinateur doté de plusieurs UC.