Planes de ejecución 1
-
Upload
solidq -
Category
Technology
-
view
115 -
download
0
Transcript of Planes de ejecución 1
![Page 2: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/2.jpg)
Sponsors del SolidQ Summit Panamá
![Page 3: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/3.jpg)
Agenda
• Repaso rápido
• Demos!
![Page 4: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/4.jpg)
¿Sabemos interpretarlos?
Optimizador de consultas
Sentencia SQL Plan de ejecuciónMágia
![Page 5: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/5.jpg)
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 6: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/6.jpg)
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 7: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/7.jpg)
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 8: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/8.jpg)
Generación de plan de ejecución
• En cada join, se incrementa exponencialmente el nº de soluciones posibles
![Page 9: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/9.jpg)
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 10: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/10.jpg)
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 11: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/11.jpg)
Planes de ejecución
¿Ves la diferencia en el grosor de la flecha?
Estimación un poco equivocada!
![Page 12: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/12.jpg)
Planes de ejecución
• Fíjate en los %
![Page 13: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/13.jpg)
Operadores JOIN
Un operador lógico se puede resolver con distintos operadores físicos
NESTED LOOP
HASH JOIN
MERGE JOIN
JOIN CLAUSE
![Page 14: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/14.jpg)
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 15: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/15.jpg)
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 16: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/16.jpg)
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 17: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/17.jpg)
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 18: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/18.jpg)
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 19: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/19.jpg)
Propiedades
![Page 20: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/20.jpg)
Operador paralelo
![Page 21: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/21.jpg)
Key lookup
![Page 22: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/22.jpg)
Demo
Leamos planes!
![Page 23: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/23.jpg)
Conclusión
• Repasar aspectos fundamentales de operadores
• Ser capaces de leer los planes de ejecución mas habituales
![Page 24: Planes de ejecución 1](https://reader031.fdocuments.es/reader031/viewer/2022013013/5886b88c1a28ab6d0e8b772b/html5/thumbnails/24.jpg)
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!