Download - Como leer planes de ejecución - edición 2015
![Page 1: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/1.jpg)
Como leer planes de ejecuciónEnrique Catala BañulsMVP , Mentor [email protected] | [email protected]: @enriquecatalawww.enriquecatala.com
![Page 2: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/2.jpg)
3 Sponsor Sessions at 11:15
Don’t miss them, they might be getting distributing some awesome prizes! HP SolidQ Pyramid Analytics
Also Raffle prizes at the end of the event provided by
HP, SolidQ, Pyramid Analytics, Altran & Microsoft
![Page 3: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/3.jpg)
Our Main Sponsors:
![Page 4: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/4.jpg)
Agenda
Repaso rápido Generación de planes Procesamiento lógico Operadores join Operadore exchange
Demos!
![Page 5: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/5.jpg)
5
Planes de ejecución¿Sabemos interpretarlos?
Optimizador de consultas
Sentencia SQL Plan de ejecuciónMágia
![Page 6: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/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
Estimación de costes
![Page 7: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/7.jpg)
Generación de plan de ejecución
En cada join, se incrementa exponencialmente el nº de soluciones posibles
Cuidado con el timeout!
![Page 8: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/8.jpg)
Visualizar plan de ejecución
SELECT * FROM dbo.Pedidos p INNER JOIN dbo.Items i ON p.ID_Pedido = i.ID_Pedido INNER JOIN dbo.Clientes c ON p.ID_Cliente = c.ID_Cliente INNER JOIN dbo.Produtos p ON i.ID_Produto = p.ID_Produto
Para no Clikearpresionar CTRL-L
![Page 9: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/9.jpg)
10
Operadores¿Qué son?
Casi todo operador funciona pidiendo filas de uno o mas hijos y devolviéndolas al que se las ha pedidoCaso especialCommon Table SpoolOperadores columnares
Cada operador devuelve de 1 fila en 1 fila *No todos
![Page 10: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/10.jpg)
11
Planes de ejecuciónFlechas
¿Ves la diferencia en el grosor de la flecha?
Estimación un poco equivocada!
1. Analiza el grosor de las flechas2. Compara los valores del plan estimado vs. el real
![Page 11: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/11.jpg)
12
Planes de ejecuciónComparar planes
Fíjate en los % de consulta
![Page 12: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/12.jpg)
13
Operadores joinNested loops
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 13: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/13.jpg)
14
Operadores joinMerge join
get 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 14: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/14.jpg)
15
Operadores joinHash join
Ejecución en dos fases1. Build: Cálculo de clave hash del inner2. Prueba: Lee la outer, crea su hash y compara con hash
precalculado en fase buildfor 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 15: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/15.jpg)
EQ_ROWS = Cantidad de líneas que poseen el último valor de la muestraEj: 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á EXCLUIDOEj: 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 muestraEj: 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_KEYEj: 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 Items1 WHERE Quantity = 110
DBCC SHOW_STATISTICS (Items1, Stats_Quantity) WITH HISTOGRAM
DBCC SHOW_STATISTICS
![Page 16: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/16.jpg)
18
DEMOLeamos planes!
Icon de tecnologíaIcon de tecnologíaIcon de tecnología
![Page 17: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/17.jpg)
PropiedadesSort
![Page 18: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/18.jpg)
PropiedadesSort
![Page 19: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/19.jpg)
PropiedadesKey lookup
![Page 20: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/20.jpg)
PropiedadesOperador paralelo
![Page 21: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/21.jpg)
Operadores exchangeDistribute Streams
Hash
Los valores de filas obtienen hash y cada
hilo se responsabiliza de un rango
hash
Round Robin
Los valores de las filas se envían al
siguiente hilo de la lista
Range
Determina a que hilo enviar
la fila evaluando una
funcion de rango sobre una columna
Rara y usada en algunos
parallel index recreation
Broadcast
Todas las filas se envian a
todos los hilos
Demand
Se usa un modo pull en lugar de push como en
las otras.
Envia la fila al thread que se la
está pidiendo
Aparece en tablas
particionadas
![Page 22: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/22.jpg)
24
Operadores exchangeRepartition streams
Consume múltiples fuentes y produce multiples fuentes No se modifican las filas Se reducen filas si aparece un operador bitmap
31
1
3
31
1
3
11
3
3
11
3
3
2
6
26
6
2
6
![Page 23: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/23.jpg)
Operadores exchangeGather streams
Consume múltiples hilos y produce un único hilo
Combina resultados Es el que mayor % de esperas suele generar
31
1
3
31
1
3
11
3
3
11
3
3
2
6
26
6
2
6
![Page 24: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/24.jpg)
26
Procesamiento lógicoDe una consulta
1. FROM2. WHERE3. GROUP BY4. HAVING5. SELECT
1. Evaluar expresiones2. Eliminar duplicados
6. ORDER BY7. OFFSET-FETCH/TOP
![Page 25: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/25.jpg)
27
Conclusión
1. Repasar aspectos fundamentales de operadores
2. Ser capaces de leer los planes de ejecución mas habituales
![Page 26: Como leer planes de ejecución - edición 2015](https://reader035.vdocument.in/reader035/viewer/2022062523/5880b8741a28abf32c8b7a59/html5/thumbnails/26.jpg)
Como leer planes de ejecuciónEnrique Catala BañulsMVP , Mentor [email protected] | [email protected]: @enriquecatalawww.enriquecatala.com