Si una instancia se ha MAXDOP
establecido en 1 y se utilizan sugerencias de consulta para permitir que consultas específicas vayan en paralelo, ¿el valor de Umbral de costo para paralelismo todavía es usado por SQL para decidir si realmente va en paralelo?
Respuesta simple: sí .
Detalles
Aquí hay un par de cosas separadas, que es importante separar:
¿Cuál es el grado máximo efectivo de paralelismo disponible para una consulta?
Los contribuyentes a esto son (en términos generales en orden de importancia):
MAX_DOP
Configuración del gobernador de recursos
MAXDOP
Configuración de sugerencia de consulta
- La
max degree of parallelism
opción de configuración de instancia
Los detalles se explican en la configuración del "Grado máximo de paralelismo" del servidor, el MAX_DOP del gobernador de recursos y la sugerencia de consulta MAXDOP: ¿cuál debe usar SQL Server? por Jack Li, ingeniero senior de escalación para el servicio y soporte al cliente de Microsoft SQL Server. La tabla a continuación se reproduce desde ese enlace:
¿Un plan de consulta utilizará paralelismo?
El optimizador de consultas de SQL Server siempre encuentra primero un plan en serie *.
Entonces sí:
- Una mayor optimización está justificada; y
- El costo del mejor plan en serie excede el
cost threshold for parallelism
valor de configuración
... el optimizador intentará encontrar un plan paralelo.
Entonces sí:
- Se encuentra un plan paralelo (es decir, es posible); y
- El costo del plan paralelo es menor que el mejor plan serial
... se producirá un plan paralelo.
Nota: el cost threshold for parallelism
único afecta si el optimizador busca un plan paralelo. Una vez que se almacena en caché un plan paralelo, se ejecutará usando paralelismo cuando se reutilice (siempre que haya hilos disponibles) independientemente de la configuración de CTFP.
Ejemplos
Para ambos ejemplos, con la instancia maxdop 1 y la sugerencia de consulta maxdop 2, el DOP disponible efectivo es 2. Si se elige un plan paralelo, usará DOP 2.
Ejemplo 1
Dado que CTFP de 50 y un plan en serie más barato encontraron un costo de 30, SQL Server no intentará encontrar un plan paralelo. Se producirá un plan en serie.
Ejemplo 2
Dado que el CTFP de 50 y un plan en serie más barato encontraron un costo de 70, SQL Server intentará encontrar un plan paralelo. Si este plan (si se encuentra) tiene un costo inferior a 70 (el costo del plan en serie), se generará un plan paralelo.
El resultado final de la optimización de consultas es siempre un plan único en caché: serial o paralelo. El optimizador solo encuentra un plan en serie en las fases search0 (TP) y search1 (QP).
Se puede entonces (como se describe) re-ejecutar término1 con el requisito de producir un plan paralelo. Luego se elige entre serie y paralelo en función del mejor costo del plan completo hasta el momento. Esa opción es vinculante en caso de que la optimización pase a search2 (Optimización completa). Cada fase de optimización considera muchas alternativas, pero el resultado de una etapa es siempre un mejor plan único, que es serial o paralelo.
Escribí sobre esto en Myth: SQL Server almacena en caché un plan en serie con cada plan paralelo