Vous êtes sur la page 1sur 30

Planes de ejecucin en SQL

Server 2014
Enrique Catala Bauls
MVP , Mentor
ecatala@solidq.com
Twitter: @enriquecatala
www.enriquecatala.com
3 Sponsor Sessions at 11:15

Dont 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
Our Main Sponsors:
Agenda

1. Planes de ejecucin
2. Operadores
3. Cardinality estimator
Planes de ejecucin
Sabemos interpretarlos?

Sentencia SQL Plan de ejecucin


Mgia

Optimizador de
consultas

5
Operadores
Cuntos y cuales son?

8
Operadores
Los bsicos que debes conocer

Clustered Index Clustered Index Non-clustered


SELECT Sort Seek Scan index scan

Non-clustered
index seek Table Scan RID Lookup Key Lookup Hash Match

Constant
Nested Loops Merge Join Compute Scalar Scan Spool

Repartition
Stream Aggregate Distribute Streams Gather Streams Streams Bitmap

Split Top Filter Lazy Spool Eager Spool

9
Operadores
Qu son?

Todo operador funciona pidiendo filas de uno o


mas hijos y devolvindolas al que se las ha pedido
Caso especial Common Table Spool
Cada operador devuelve de 1 fila en 1 fila
*No todos -> Ver sesin Niko Neugebauer a las 13h BI

10
DEMO
Operadores bsicos

12
Procesamiento lgico
De una consulta

1. FROM
2. WHERE
3. GROUP BY
4. HAVING
5. SELECT
1. Evaluar expresiones
2. Eliminar duplicados
6. ORDER BY
7. OFFSET-FETCH/TOP

13
Planes de ejecucin
Flechas

1. Analiza el grosor de las flechas


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

Ves la diferencia en el grosor de la flecha?

Estimacin un poco equivocada!

14
Planes de ejecucin
Comparar planes

Fjate en los % de consulta

15
Operadores join
Nested 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

16
Tabla de Cursos: Tabla de Alumnos:
ID_Curso Nombre_Curso ID_Alum Nombre_Aluno ID_Curso
1Paisajismo 1Luis 2
2Fotografa 2Ana 6
3Arte Clsico 3Juan 5
4Matemticas 4Pepe 3
5Fsica 5Carlos 4
6Qumica 6Felipe 3
7Iratxe 5
8Mara 4

Resultado:
Nombre Alumno | Nombre Curso
1-Luis |2-Fotografa
4-Pepe |3-Arte Clsico
6-Felipe |3-Arte Clsico
5-Carlos |4-Matemticas
8-Mara |4-Matemticas
...
Operadores join
Merge join
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
}

18
Operadores join
Merge join
Tabla de Cursos: Tabla de Alumnos:
ID_Curso Nombre_Curso ID_Aluno
ID_Alum Nombre_Alumno ID_Curso
1Paisajismo s Nome_Aluno
1Lus s 2
2Fotografa 1Lus
4Pepe 23
3Arte Clsico 2Ana
6Felipe 63
4Matemticas 3Juan
5Carlos 54
5Fsica 4Pepe
8Mara 34
5Carlos 4
6Qumica
6Felipe 3
7Iratxe 5
8Mara 4

Resultado:
Nombre Alumno | Nombre Curso
1-Luis |2-Fotografa
4-Pepe |3-Arte Clsico
6-Felipe |3-Arte Clsico
5-Carlos |4-Matemticas
8-Mara |4-Matemticas
...
Operadores join
Hash join

Ejecucin en dos fases


1. Build: Clculo 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)
}

20
Recomendaciones

No No Bloqueante

Merge Join

Hash Join
Nested Loop

bloqueante bloqueante
Eficiencia de Tabla inner
tabla inner Datos muy
(arriba) ordenados pequea
Soporta
cualquier Solo
join equijoin
Util cjtos
pequeos
Propiedades
DEMO
Leamos planes!

23
Operadores exchange
Distribute Streams

Hash Round Robin Range Broadcast Demand

Los valores de Los valores de Determina a Todas las filas Se usa un


filas obtienen las filas se que hilo enviar se envian a modo pull en
hash y cada envan al la fila todos los hilos lugar de push
hilo se siguiente hilo evaluando una como en las
responsabiliza de la lista funcion de otras.
de un rango rango sobre Envia la fila al
hash una columna thread que se
Rara y usada la est
en algunos pidiendo
parallel index Aparece en
recreation tablas
particionadas
Operadores exchange
Repartition streams

Consume mltiples fuentes y produce multiples fuentes


No se modifican las filas
Se reducen filas si aparece un operador bitmap

25
Operadores exchange
Gather streams

Consume mltiples hilos y produce un nico hilo


Combina resultados
Es el que mayor % de esperas suele generar
Agenda

1. Planes de ejecucin
2. Operadores
3. Cardinality estimator
Cardinality estimator
El mayor cambio en el motor OnDisk desde SQL Server 7.0

Aporta el n de registros

Estimar selectividad del predicado


involucrados
WHERE en la
sentencia (en cada paso)

Estima el recuento de
filas afectadas

Aporta distribucin de
valores
Aporta info distinct
count
Aporta info sobre
duplicados

29
Cardinality estimator
El mayor cambio en el motor OnDisk desde SQL Server 7.0

Se decide el algoritmo de obtencin de datos


Malas interpretaciones producen
Malos planes de ejecucin
Mal rendimiento de consultas

30
Cardinality estimator Acaso
eso
Desde SQL Server 7.0 hasta SQL Server 2012 sucede?

Independencia Uniformidad Contenido

Distribucin de datos Los valores se Si algo se busca ser


independiente de unos distribuyen porque existe
campos a otros salvo uniformemente
que se indique lo Si una table se cruza,
contrario ser porque existe el
dato en ambas

El rango menor se
asume contenido en el
Inclusin mayor

En equijoin se assume
que el valor existe

31
DEMO
Nuevo cardinality estimator

33
Conclusin

1. Ser capaces de leer los planes de


ejecucin
2. Conocer el funcionamiento de los
operadores mas importantes
3. Conocer algunas novedades en SQL
Server 2014

34
Gracias!

Enrique Catala Bauls


ecatala@solidq.com
Twitter: @enriquecatala
www.enriquecatala.com

Vous aimerez peut-être aussi