+ All Categories
Home > Data & Analytics > Como leer planes de ejecución - edición 2015

Como leer planes de ejecución - edición 2015

Date post: 14-Apr-2017
Category:
Upload: enrique-catala-banuls
View: 406 times
Download: 0 times
Share this document with a friend
26
Como leer planes de ejecución Enrique Catala Bañuls MVP , Mentor SolidQ [email protected] | [email protected] Twitter: @enriquecatala www.enriquecatala.com
Transcript
Page 1: Como leer planes de ejecución - edición 2015

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

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

Our Main Sponsors:

Page 4: Como leer planes de ejecución - edición 2015

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

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

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

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

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

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

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

12

Planes de ejecuciónComparar planes

Fíjate en los % de consulta

Page 12: Como leer planes de ejecución - edición 2015

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

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

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

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

18

DEMOLeamos planes!

Icon de tecnologíaIcon de tecnologíaIcon de tecnología

Page 17: Como leer planes de ejecución - edición 2015

PropiedadesSort

Page 18: Como leer planes de ejecución - edición 2015

PropiedadesSort

Page 19: Como leer planes de ejecución - edición 2015

PropiedadesKey lookup

Page 20: Como leer planes de ejecución - edición 2015

PropiedadesOperador paralelo

Page 21: Como leer planes de ejecución - edición 2015

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

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

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

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

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

Como leer planes de ejecuciónEnrique Catala BañulsMVP , Mentor [email protected] | [email protected]: @enriquecatalawww.enriquecatala.com


Recommended