MAXDOP = 1, sugerencias de consulta y umbral de costo para paralelismo

11

Si una instancia se ha MAXDOPestablecido 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?

No he podido desenterrar esta información específica, aunque este enlace sugiere que CTFP se ignora si MAXDOPes 1. Esto tiene sentido sin sugerencias de consulta ya que ninguna solicitud, independientemente del costo, irá en paralelo cuando MAXDOPsea ​​1.

¿Alguien puede decirme cuál será el comportamiento esperado de estas dos solicitudes?

Ejemplo 1:

Instance Maxdop: 1 
CTFP: 50 
Query hint: Maxdop=2 
Query cost: 30

Ejemplo 2

Instance Maxdop: 1
CTFP: 50
Query hint: Maxdop=2
Query cost: 70
Martin Bansey
fuente

Respuestas:

20

Si una instancia se ha MAXDOPestablecido 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: .

Detalles

Aquí hay un par de cosas separadas, que es importante separar:

  1. ¿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_DOPConfiguración del gobernador de recursos
    • MAXDOPConfiguración de sugerencia de consulta
    • La max degree of parallelismopció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:

    tabla de paralelismo

  2. ¿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 parallelismvalor 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

Paul White 9
fuente
2

Ejemplo 1 Instancia Maxdop: 1 CTFP: 50 Sugerencia de consulta: Maxdop = 2 Costo de consulta: 30

La sugerencia de consulta MAXDOP anula el grado máximo de configuración de paralelismo en toda la instancia, pero dado que CTPF es 50 y el costo de la consulta es 30, puede optar por un plan en serie.

Ejemplo 2 Instancia Maxdop: 1 CTFP: 50 Sugerencia de consulta: Maxdop = 2 Costo de consulta: 70

Aquí nuevamente, el grado máximo de paralelismo se tomará como 2, ya que la sugerencia MAXDOP está allí, pero CTFP se tomará como 50 y la consulta, si es posible, como Paul mencionó, puede ejecutarse en paralelo.

Si una instancia tiene MAXDOP establecido en 1 y se usan 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?

La sugerencia MAXDOP anulará la configuración amplia de la instancia del grado máximo de paralelismo.

Citando de la sugerencia de MAXDOP docs.microsoft

Número MAXDOP Se aplica a: SQL Server 2008 hasta SQL Server 2017.

Anula la opción de configuración de grado máximo de paralelismo de sp_configure y Resource Governor para la consulta que especifica esta opción. La sugerencia de consulta MAXDOP puede exceder el valor configurado con sp_configure. Si MAXDOP excede el valor configurado con el regulador de recursos, el motor de base de datos usa el valor MAXDOP del regulador de recursos,

Shanky
fuente