Download - Como leer planes de ejecución
@SQSummit13
@enriquecatala
Como leer planes de ejecución
300
REL30006
Enrique Catala Bañuls
MCT – Microsoft Active Professional – Technical Ranger
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
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
Planes de ejecución¿Sabemos interpretarlos?
4
Optimizador de consultas
Sentencia SQL Plan de ejecuciónMágia
Operadores¿Cuántos y cuales son?
5
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
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
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
DEMO
9
Operadores básicos
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
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
Planes de ejecuciónComparar planes
12
Fíjate en los % de consulta
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
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
...
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
}
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
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)
}
DEMO
18
Leamos planes!
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
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
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
¿Preguntas?
28
¡Gracias!
Siéntate a comer con nosotros o tómate un café y aclara tus
dudas
29
@enriquecatala
Mentor
Enrique Catalá
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