planes de ejecución en sql server 2014

30
Planes de ejecución en SQL Server 2014 Enrique Catala Bañuls MVP , Mentor [email protected] Twitter: @enriquecatala www.enriquecatala.com

Upload: enrique-catala-banuls

Post on 20-Jul-2015

253 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Planes de ejecución en sql server 2014

Planes de ejecución en SQL

Server 2014

Enrique Catala BañulsMVP , Mentor

[email protected]

Twitter: @enriquecatala

www.enriquecatala.com

Page 2: Planes de ejecución en sql server 2014

3 Sponsor Sessions at 11:15

Don’t miss them, they might be getting distributing some awesome prizes!

Attunity

SolidQ

ApexSQL

Also Raffle prizes at the end of the event provided by

Cisco, SolidQ, Attunity, ApexSQL & Microsoft

Page 3: Planes de ejecución en sql server 2014

Our Main Sponsors:

Page 4: Planes de ejecución en sql server 2014

Agenda

1. Planes de ejecución

2. Operadores

3. Cardinality estimator

Page 5: Planes de ejecución en sql server 2014

Planes de ejecución¿Sabemos interpretarlos?

5

Optimizador de consultas

Sentencia SQL Plan de ejecuciónMágia

Page 6: Planes de ejecución en sql server 2014

Operadores¿Cuántos y cuales son?

8

Page 7: Planes de ejecución en sql server 2014

OperadoresLos básicos que debes conocer

9

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 8: Planes de ejecución en sql server 2014

Operadores¿Qué son?

10

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 -> Ver sesión Niko Neugebauer a las 13h BI

Page 9: Planes de ejecución en sql server 2014

DEMO

12

Operadores básicos

Page 10: Planes de ejecución en sql server 2014

Procesamiento lógicoDe una consulta

13

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 en sql server 2014

Planes de ejecuciónFlechas

14

¿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: Planes de ejecución en sql server 2014

Planes de ejecuciónComparar planes

15

Fíjate en los % de consulta

Page 13: Planes de ejecución en sql server 2014

Operadores joinNested loops

16

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 ejecución en sql server 2014

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: Planes de ejecución en sql server 2014

Operadores joinMerge join

18

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: Planes de ejecución en sql server 2014

Tabla de Alumnos:

ID_Curso Nombre_Curso

1Paisajismo

2Fotografía

3Arte Clásico

4Matemáticas

5Física

6Química

Tabla de Cursos:

Resultado:

ID_Aluno

s 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: Planes de ejecución en sql server 2014

Operadores joinHash join

20

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 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 18: Planes de ejecución en sql server 2014

RecomendacionesN

este

dLoop • No

bloqueante

• Eficiencia de tabla inner(arriba)

• Soporta cualquier join

• Util cjtospequeños

Merg

e J

oin • No bloqueante

• Datos ordenados

• Solo equijoin

Hash J

oin • Bloqueante

• Tabla innermuy pequeña

Page 19: Planes de ejecución en sql server 2014

Propiedades

Page 20: Planes de ejecución en sql server 2014

DEMO

23

Leamos planes!

Page 21: Planes de ejecución en sql server 2014

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 indexrecreation

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: Planes de ejecución en sql server 2014

Operadores exchangeRepartition streams

25

• Consume múltiples fuentes y produce multiples fuentes

• No se modifican las filas

• Se reducen filas si aparece un operador bitmap

Page 23: Planes de ejecución en sql server 2014

Operadores exchangeGather streams

• Consume múltiples hilos y produce un único hilo

• Combina resultados

• Es el que mayor % de esperas suele generar

Page 24: Planes de ejecución en sql server 2014

Agenda

1. Planes de ejecución

2. Operadores

3. Cardinality estimator

Page 25: Planes de ejecución en sql server 2014

Cardinality estimatorEl mayor cambio en el motor “OnDisk” desde SQL Server 7.0

29

• Aporta el nº de registros

involucrados en la

sentencia (en cada paso)

• Estima el recuento de

filas afectadas

• Aporta distribución de

valores

• Aporta info distinct

count

• Aporta info sobre

duplicados

Est

imarse

lecti

vid

ad

del p

red

icad

oWHERE

Page 26: Planes de ejecución en sql server 2014

• Se decide el algoritmo de obtención de datos

• Malas interpretaciones producen

• Malos planes de ejecución

• Mal rendimiento de consultas

Cardinality estimatorEl mayor cambio en el motor “OnDisk” desde SQL Server 7.0

30

Page 27: Planes de ejecución en sql server 2014

Cardinality estimatorDesde SQL Server 7.0 hasta SQL Server 2012

31

Independencia

• Distribución de datos

independiente de unos

campos a otros salvo

que se indique lo

contrario

Uniformidad

• Los valores se

distribuyen

uniformemente

Contenido

• Si algo se busca será

porque existe

• Si una table se cruza,

será porque existe el

dato en ambas

• El rango menor se

asume contenido en el

mayorInclusión

• En equijoin se assume

que el valor existe

¿Acaso

eso

sucede?

Page 28: Planes de ejecución en sql server 2014

DEMO

33

Nuevo cardinality estimator

Page 29: Planes de ejecución en sql server 2014

Conclusión

1. Ser capaces de leer los planes de

ejecución

2. Conocer el funcionamiento de los

operadores mas importantes

3. Conocer algunas novedades en SQL

Server 2014

34

Page 30: Planes de ejecución en sql server 2014

Gracias!

Enrique Catala Bañuls

[email protected]

Twitter: @enriquecatala

www.enriquecatala.com