Como leer planes de ejecución

24
@SQSummit13 @enriquecatala Como leer planes de ejecución 300 REL30006 Enrique Catala Bañuls [email protected] MCT – Microsoft Active Professional – Technical Ranger

description

Todo el mundo que trabaja con base de datos siempre se ha preguntado alguna vez qué son los planes de ejecución y como se leen. Saber leer un plan de ejecución nos va a dar información valiosísima de cara a mejorar el rendimiento de una consulta. En esta sesión vamos a centrarnos en aprender a leer T-SQL para interpretar lo que está haciendo SQL Server para devolvernos la información.

Transcript of Como leer planes de ejecución

Page 1: Como leer planes de ejecución

@SQSummit13

@enriquecatala

Como leer planes de ejecución

300

REL30006

Enrique Catala Bañuls

[email protected]

MCT – Microsoft Active Professional – Technical Ranger

Page 2: Como leer planes de ejecución

EN CUMPLIMIENTO CON LA LEY 15/1999 DE PROTECCION DE DATOS DE

CARÁCTER PERSONAL, PONEMOS EN TU CONOCIMIENTO QUE

ESTA SESIÓN VA A SER GRABADA

POR SOLIDQ Y QUE ESTA GRABACIÓN PODRÍA SER UTILIZADA COMO MATERIAL

DE MARKETING Y HACERSE PUBLICA A TRAVÉS DE DIVERSOS MEDIOS, COMO

POR EJEMPLO NUESTRA PAGINA WEB.

TENIENDO EN CUENTA QUE TU IMAGEN PUEDE APARECER EN ESA GRABACIÓN,

SI NO DESEAS APARECER, ROGAMOS NOS LO COMUNIQUES POR LOS MEDIOS

QUE YA CONOCES.

COMUNICADO

2

Page 3: Como leer planes de ejecución

Objetivos de la sesión

1. Familiarizarse con entorno SSMS para

extraer información de planes de

ejecución

2. Ser capaces de leer los planes de

ejecución

3. Conocer el funcionamiento de los

operadores mas importantes

3

Page 4: Como leer planes de ejecución

Planes de ejecución¿Sabemos interpretarlos?

4

Optimizador de consultas

Sentencia SQL Plan de ejecuciónMágia

Page 5: Como leer planes de ejecución

Operadores¿Cuántos y cuales son?

5

Page 6: Como leer planes de ejecución

OperadoresLos básicos que debes conocer

6

SELECT SortClustered Index

Seek

Clustered Index

Scan

Non-clustered

index scan

Non-clustered

index seek Table Scan RID Lookup Key Lookup Hash Match

Nested Loops Merge Join Compute Scalar Constant Scan Spool

Stream Aggregate Distribute Streams Gather Streams

Repartition

Streams Bitmap

Split Top Filter Lazy Spool Eager Spool

Page 7: Como leer planes de ejecución

Operadores¿Qué son?

7

SQL Server 2012 posee unos 166 operadores lógicos y físicos

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 8: Como leer planes de ejecución

Operadores¿Qué hacen por dentro?

8

Tipo Operador Open() GetNext() Close()

Scan/Seek • Abrir con al motor

relacional

• Pedir fila a tabla • Cerrar conexión

Filter • Abrir iterador hijo • Llamar GetNext() del

hijo mientras no se

cumpla el filtro

• Cerrar conexión con

hijo

Sort • Reservar espacio

worktable

• Abrir conexión a

operador hijo

• GetNext() a hijo

• Meter filas en

worktable

• Cerrar conexión a

hijo

• Ordenar contenidos

worktable

• Devolver filas del

worktable una vez

ordenadas

• Destruir worktable

Merge Join • Abrir ambos

operadores hijo

• Llamar a GetNext del

input con el minimo

valor hasta que un

match se detecte,

devolviendo el match

• Cerrar ambos inputs

Page 9: Como leer planes de ejecución

DEMO

9

Operadores básicos

Page 10: Como leer planes de ejecución

Procesamiento lógicoDe una consulta

10

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: Como leer planes de ejecución

Planes de ejecuciónFlechas

11

¿Ves la diferencia en el grosor de la flecha?

Estimación un poco equivocada!

1. Analiza el grosor de las flechas

2. Compara los valores del plan estimado vs. el real

Page 12: Como leer planes de ejecución

Planes de ejecuciónComparar planes

12

Fíjate en los % de consulta

Page 13: Como leer planes de ejecución

Operadores joinNested loops

13

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: Como leer planes de ejecución

ID_Alum Nombre_Aluno ID_Curso

1Luis 2

2Ana 6

3Juan 5

4Pepe 3

5Carlos 4

6Felipe 3

7Iratxe 5

8María 4

Tabla de Alumnos:

ID_Curso Nombre_Curso

1Paisajismo

2Fotografía

3Arte Clásico

4Matemáticas

5Física

6Química

Tabla de Cursos:

Resultado:

Nombre Alumno | Nombre Curso

1-Luis |2-Fotografía

4-Pepe |3-Arte Clásico

6-Felipe |3-Arte Clásico

5-Carlos |4-Matemáticas

8-María |4-Matemáticas

...

Page 15: Como leer planes de ejecución

Operadores joinMerge join

15

get first row R1 from input 1

get 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: Como leer planes de ejecución

Tabla de Alumnos:

ID_Curso Nombre_Curso

1Paisajismo

2Fotografía

3Arte Clásico

4Matemáticas

5Física

6Química

Tabla de Cursos:

Resultado:

ID_Alunos Nome_Aluno

ID_Curso

s

1Luís 2

2Ana 6

3Juan 5

4Pepe 3

5Carlos 4

6Felipe 3

7Iratxe 5

8María 4

ID_Alum Nombre_Alumno ID_Curso

1Luís 2

4Pepe 3

6Felipe 3

5Carlos 4

8María 4

Nombre Alumno | Nombre Curso

1-Luis |2-Fotografía

4-Pepe |3-Arte Clásico

6-Felipe |3-Arte Clásico

5-Carlos |4-Matemáticas

8-María |4-Matemáticas

...

Operadores joinMerge join

Page 17: Como leer planes de ejecución

Operadores joinHash join

17

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 18: Como leer planes de ejecución

DEMO

18

Leamos planes!

Page 19: Como leer planes de ejecución

Operadores exchangeRepartition streams

21

• Consume múltiples fuentes y produce multiples fuentes

• No se modifican las filas

• Se reducen filas si aparece un operador bitmap

Page 20: Como leer planes de ejecución

Operadores joinDiferencias

26

Nested Loops: – Útiles para conjuntos pequeños de resultados.

– Su eficiencia depende del producto de tabla inner (arriba) * tabla outer (abajo)

– Puede escupir resultados inmediatamente

– soporta cualquier tipo de join

– Es el que más frecuentemente se encuentra

– Es altamente ineficiente si los conjuntos de datos son grandes

Merge join: – Util para conjuntos relativamente medianos de resultados.

– Es el mejor cuando hablamos de grandes valores de datos en tabla inner y outer porque su eficiencia depende de la suma de filas de ambas tablas

– Puede escupir resultados inmediatamente

– Solo soporta equijoin

– Los datos deben ser ordenados

Hash join: – Util para grandes conjuntos de resultados no ordenados y cuando la tabla que manda (inner) tiene

sustancialmente menos filas que la dependiente.

– Hasta no estar todo calculado, no escupe resultados

– Ineficiente si las dos tablas son muy grandes

– Su existencia indica:• Falta un índice o el que existe no nos sirve

• Falta WHERE

• Alguna condicion no satisface al indice (en caso de haberlo) por culpa de algun calculo o algo...

• Si la estimación de memoria inicial es mala…paginacion a disco!

• Hash Warning Events - Profiler

Page 21: Como leer planes de ejecución

ConclusionesObjetivos de la sesión

27

1. Ya sabemos como obtener información

relevante

2. Podemos leer sin miedo planes de

ejecución

3. Conocemos el funcionamiento interno de

operadores comunes

Page 22: Como leer planes de ejecución

¿Preguntas?

28

Page 23: Como leer planes de ejecución

¡Gracias!

Siéntate a comer con nosotros o tómate un café y aclara tus

dudas

29

@enriquecatala

Mentor

Enrique Catalá

Page 24: Como leer planes de ejecución

Si quieres disfrutar de las mejores sesiones de

nuestros mentores de España y Latino América,

ésta es tu oportunidad.

http://summit.solidq.com/madrid/

Síguenos:

30