planes de ejecucion 1

23
#SQSummit Planes de ejecución 1 Enrique Catalá Bañuls Mentor [email protected]

Upload: enrique-catala-banuls

Post on 09-Jan-2017

608 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Planes de ejecucion 1

#SQSummit

Planes de ejecución 1

Enrique Catalá Bañuls

Mentor

[email protected]

Page 2: Planes de ejecucion 1

Agenda

• Repaso rápido

• Demos!

Page 3: Planes de ejecucion 1

¿Sabemos interpretarlos?

Optimizador de consultas

Sentencia SQL Plan de ejecuciónMágia

Page 4: Planes de ejecucion 1

Planes de ejecución en SQL Server

Existe en

plan caché?

Compilar y optimizar

query

Ejecucion query

Fin de ejecución

NO

Ejecutar query

Necesario

recompilar?

NO

Query Store

Obtener plan de caché

SI

SI

Enviar texto y plan

Nuevo plan forzado

Obtener plan forzado

Page 5: Planes de ejecucion 1

Generación de plan de ejecución

• El optimizador utiliza dos tipos de clave• Tiempo E/S: Coste de leer páginas de un

subsistema de disco• Tiempo CPU: Coste de aplicar predicados y tuplas

en memoria

Page 6: Planes de ejecucion 1

Generación de plan de ejecución

• Stage 0• Reglas básicas de evaluacion usando hash y nested join• Si el coste del plan es menor a 0.2 usar este plan

• Stage 1• Explorar mas reglas incluso alterando el orden de los

join

• Stage 2• Explorar todas las opciones y optar por el plan menos

costoso tras un nº limitado de exploraciones

if(best_plan_for_now.cost<1) return(best_plan_for_now)

else if(MAXDOP>0

and best_plan.cost > threshold for parallelism)

return(MIN(create_paralel_plan().cost, best_plan_for_now))

Page 7: Planes de ejecucion 1

Generación de plan de ejecución

• En cada join, se incrementa exponencialmente el nº de soluciones posibles

Page 8: Planes de ejecucion 1

Operadores

• Todo operador funciona pidiendo filas de uno o mas hijos y devolviéndolas al que se las ha pedido• Caso especial Common Table Spool

• Cada operador devuelve de 1 fila en 1 fila• *No todos

Page 9: Planes de ejecucion 1

Procesamiento lógico

1. FROM

2. WHERE

3. GROUP BY

4. HAVING

5. SELECT1. Evaluar expresiones

2. Eliminar duplicados

6. ORDER BY

7. OFFSET-FETCH/TOP

Page 10: Planes de ejecucion 1

Planes de ejecución

¿Ves la diferencia en el grosor de la flecha?

Estimación un poco equivocada!

Page 11: Planes de ejecucion 1

Planes de ejecución

• Fíjate en los %

Page 12: Planes de ejecucion 1

Operadores JOIN

Un operador lógico se puede resolver con distintos operadores físicos

NESTED LOOP

HASH JOIN

MERGE JOIN

JOIN CLAUSE

Page 13: Planes de ejecucion 1

Operadores join

for each row R1 in the outer table

{

for each row R2 in the inner table

{

if R1 joins with R2

return (R1, R2)

}

}

*No confundir inner

table con inner join ni

outer table com outer

join

Page 14: Planes de ejecucion 1

Merge joinget first row R1 from input 1get first row R2 from input 2

while not at the end of either input{

if R1 joins with R2{

return (R1, R2)get next row R2 from input 2

}else if R1 < R2

get next row R1 from input 1

else

get next row R2 from input 2

}

Page 15: Planes de ejecucion 1

Hash join

• Ejecución en dos fases1. Build: Cálculo de clave hash del inner

2. Prueba: Lee la outer, crea su hash y compara con hash precalculado en fase build

for each row R1 in the build table

{

calculate hash value on R1 join key(s)

insert R1 into the appropriate hash bucket

}

for each row R2 in the probe table

{

calculate hash value on R2 join key(s)

for each row R1 in the corresponding hash bucket

if R1 joins with R2

return (R1, R2)

}

Page 16: Planes de ejecucion 1

Recomendaciones

• No bloqueante

• Eficiencia de tabla inner (arriba)

• Soporta cualquier join

• Util cjtos pequeños

NestedLoop

• No bloqueante

• Datos ordenados

• Solo equijoin

Merge Join

• Bloqueante

• Tabla inner muy pequeña

Hash Join

Page 17: Planes de ejecucion 1

Leectura de histogramas

EQ_ROWS = Cantidad de líneas que poseen el último valor de la muestra

Ej: Existen 64 líneas para la mostra 111 (línea 5)DISTINCT_RANGE_ROWS = Cantidad de valores distintos dentro de un intervalo. El

valor de RANGE_HI_KEY está EXCLUIDO

Ej: En la línea 5 (108 hasta 110) tenemos 3 valores distintosDebería llamarse DISTINCT_RANGE_VALUES

AVG_RANGE_ROWS = Media de valores en el rango (RANGE_ROWS/ DISTINCT_RANGE_ROWS)

Ej: En la linea 5 tenemos 160 / 3 = 53,33333

RANGE_HI_KEY = Valor clave de cada muestra

Ej: En la línea 5 tenemos el valor 111 que va de 108 (107 (Línea 4) + 1) hasta 111

RANGE_ROWS = Cantidad de líneas que poseen valores iguales a los de la muestra

excluyendo el valor de RANGE_HI_KEY

Ej: La línea 5 va de 108 a 110 (excluyendo el valor 111(RANGE_HI_KEY)). Dentro de este rango tenemos 160 líneas

El valor buscado (110) está entre las líneas 4 y 5

SELECT *FROM Items1WHERE Quantity = 110

DBCC SHOW_STATISTICS (Items1, Stats_Quantity) WITH HISTOGRAM

Page 18: Planes de ejecucion 1

Propiedades

Page 19: Planes de ejecucion 1

Operador paralelo

Page 20: Planes de ejecucion 1

Key lookup

Page 21: Planes de ejecucion 1

Demo

Leamos planes!

Page 22: Planes de ejecucion 1

Conclusión

• Repasar aspectos fundamentales de operadores

• Ser capaces de leer los planes de ejecución mas habituales

Page 23: Planes de ejecucion 1

También puedes preguntar tus

dudas con el hashtag

#SQSummit en Twitter

ADAPTIVE BI FRAMEWORK

Te ayudaremos a mejorar la velocidad de desarrollo de tu plataforma de analítica de negocio basada en nuestra experiencia:

•Diseña antes de construir

•Automatización de procesos por ETL

•Servicios de mentoring para ayudarte a conseguir mejores prácticas para la construcción de procesos específicos y plataformas de analítica de negocio

•Muy fácil de mantener

SOLIDQ FLEX SERVICES

Con SolidQ Flex Services evitarás sustos, consiguiendo que tus sistemas sean estables. Desde una solución sencilla de monitorización, hasta un servicio de atención de incidencias 24/7, mantenimiento proactivo, resolución de problemas y línea de soporte.

Todo con un coste fijo mensual… y tú dedica el tiempo a las cosas importantes.

¡Gracias!