Si une instance a MAXDOP
définie sur 1 et que les indices de requête sont utilisés pour permettre à des requêtes spécifiques de se mettre en parallèle, la valeur du seuil de coût pour le parallélisme est-elle toujours utilisée par SQL pour décider si oui ou non se mettre en parallèle?
Je n'ai pas été en mesure de déterrer ces informations spécifiques bien que ce lien suggère que CTFP est ignoré si MAXDOP
est 1. Cela a du sens sans conseils de requête car aucune demande, quel que soit le coût , deviendra parallèle lorsque MAXDOP
est égal à 1.
Quelqu'un peut-il me faire savoir quel sera le comportement attendu de ces deux demandes?
Exemple 1:
Instance Maxdop: 1
CTFP: 50
Query hint: Maxdop=2
Query cost: 30
Exemple 2:
Instance Maxdop: 1
CTFP: 50
Query hint: Maxdop=2
Query cost: 70
Si une instance a
MAXDOP
définie sur 1 et que les indices de requête sont utilisés pour permettre à des requêtes spécifiques de se mettre en parallèle, la valeur du seuil de coût pour le parallélisme est-elle toujours utilisée par SQL pour décider si oui ou non se mettre en parallèle?
Réponse simple: oui .
Il y a quelques choses distinctes qui se passent ici, qu'il est important de séparer:
Quel est le efficace degré maximum de parallélisme disponible à une requête?
Les contributeurs à cela sont (globalement par ordre d'importance):
MAX_DOP
réglageMAXDOP
paramètremax degree of parallelism
option de configuration d'instanceLes détails sont expliqués dans paramètre "Max Degree of Parallelism" du serveur, MAX_DOP du gouverneur de ressources et indice de requête MAXDOP - lequel devrait utiliser SQL Server? par Jack Li, ingénieur principal en escalade pour le service client Microsoft SQL Server et Soutien. Le tableau ci-dessous est reproduit à partir de ce lien:
Un plan de requête utilisera-t-il le parallélisme?
L'optimiseur de requêtes SQL Server trouve toujours d'abord un plan série *.
Puis si:
cost threshold for parallelism
valeur de configuration
... l'optimiseur va essayer pour trouver un plan parallèle.
Puis si:
... un plan parallèle sera produit.
Remarque: le cost threshold for parallelism
affecte uniquement si l'optimiseur recherche un plan parallèle. Une fois qu'un plan parallèle est mis en cache, il s'exécute en utilisant le parallélisme lorsqu'il est réutilisé (tant que les threads sont disponibles) quel que soit le paramètre CTFP.
Pour les deux exemples, avec l'instance maxdop 1 et l'indicateur de requête maxdop 2, le DOP disponible effectif est 2. Si un plan parallèle est choisi, il utilisera DOP 2.
Étant donné le CTFP de 50 et un plan série le moins cher coût de 30, SQL Server ne ((== --- ==) pas essayez de trouver un plan parallèle. Un plan de série sera produit.
Étant donné le CTFP de 50 et un plan série le moins cher trouvé coût de 70, SQL Server cherchera essayez pour trouver un plan parallèle . Si ce plan (s'il est trouvé) a un coût inférieur à 70 (le coût du plan de série), un plan parallèle sera produit.
Le résultat final de l'optimisation des requêtes est toujours un plan en cache unique: parallèle série ou . L'optimiseur ne trouve qu'un plan série dans les phases search0 (TP) et search1 (QP).
Il mai puis (comme décrit) réexécute search1 avec la nécessité de produire un plan parallèle. Un choix est alors fait entre série et parallèle sur la base du meilleur coût du plan jusqu'à présent. Ce choix est contraignant dans le cas où l'optimisation passe à search2 (Optimisation complète). Chaque phase d'optimisation considère de nombreuses alternatives, mais la sortie d'une étape est toujours un plan unique optimal, qui est soit en série soit en parallèle.
J'ai écrit à ce sujet dans Mythe: SQL Server met en cache un plan série avec chaque plan parallèle
Exemple 1 Instance Maxdop: 1 CTFP: 50 Indice de requête: Maxdop = 2 Coût de la requête: 30
L'indicateur de requête MAXDOP remplace le degré maximal de parallélisme définissant l'instance à l'échelle, mais comme le CTPF est de 50 et le coût de la requête est de 30, il peut aller pour le plan série.
Exemple 2 Instance Maxdop: 1 CTFP: 50 Indice de requête: Maxdop = 2 Coût de la requête: 70
Ici encore, le degré maximum de parallélisme sera pris comme 2 puisque l'indication MAXDOP est là mais CTFP sera pris comme 50 et la requête, si possible comme Paul l'a mentionné, peut fonctionner en parallèle.
Si MAXDOP est défini sur 1 dans une instance et que des indices de requête sont utilisés pour permettre à des requêtes spécifiques de se dérouler en parallèle, la valeur du seuil de coût pour le parallélisme est-elle toujours utilisée par SQL pour décider si elle doit ou non être parallèle?
indice MAXDOP remplacera le paramètre à l'échelle de l'instance du degré maximal de parallélisme.
Citation de documents de conseil MAXDOP Microsoft
Numéro MAXDOP S'applique à: SQL Server 2008 à SQL Server 2017.
Substitue l'option de configuration du degré maximal de parallélisme de sp_configure et du gouverneur de ressources pour la requête spécifiant cette option. L'indicateur de requête MAXDOP peut dépasser la valeur configurée avec sp_configure. Si MAXDOP dépasse la valeur configurée avec le gouverneur de ressources, le moteur de base de données utilise la valeur MAXDOP du gouverneur de ressources,