Está en la página 1de 35

Planes de ejecución en SQL Server

2014
Enrique Catala Bañuls (España) @enriquecatala

MVP | MCT | ecatala@solidq.com www.enriquecatala.com

Moderada: Freddy Angarita


Gracias a nuestros auspiciadores

Database Security as Easy as A-B-C

http://www.greensql.com

Hardcore Developer and IT SQL Server Performance


Training Try PlanExplorer today!

http://www.pluralsight.com http://www.sqlsentry.com
Próximos SQL Saturday

6 de Diciembre de 2014
https://www.sqlsaturday.com/351/register.aspx

24 de Enero de 2015
https://www.sqlsaturday.com/346/register.aspx

18 de Abril de 2015
https://www.sqlsaturday.com/368/register.aspx

9 de Mayo de 2015
https://www.sqlsaturday.com/373/register.aspx
Capítulo Global PASS en Español

Reuniones semanales todos los miércoles a


las 12PM UTC-5 (Hora de Colombia)

https://www.facebook.com/SpanishPASSVC

4
4
Asistencia Técnica

Si requiere asistencia Use el botón de Zoom Escriba sus preguntas


durante la sesión debe para ajustar su pantalla en la sección de
usar la sección de al tamaño deseado preguntas que esta en el
preguntas que esta en el menú de la derecha
menú de la derecha.

5
Enrique Cátala
• Mentor en SolidQ
• Microsoft SQL Server MVP
• Ingeniero en informática
• Microsoft Certified Trainer (MCT) , MCSE y MAP (Microsoft Active Professional).
• Centrado en el motor relacional SQL Server, tanto en la resolución de problemas de
rendimiento y escalabilidad en sistemas OLTP como la definición e implementación de
entornos de alta disponibilidad confiables, en donde ha llevado con éxito más de 90
proyectos no solo en España, sino en diferentes países como EEUU, Holanda, México,
Arabia Saudí o Austria.
• Arquitecto principal de las soluciones para SolidQ llamadas HealthCheck, SQL2Cloud,
SCODA y del generador de SSIS de SolidQ
• Ponente habitual del SolidQ SUMMIT, miembro y ponente en SQL PASS tanto en España
como Iberoamérica ponente en varios SQLSaturday
• Colabora con Microsoft realizando Webcast y conferencias.
• Mantiene tanto su blog personal (http://www.enriquecatala.com/ ), como "El Rincón del DBA"
(http://blogs.solidq.com/es/elrincondeldba ) con colegas de SolidQ.

6
6
Agenda

1. Planes de ejecución
2. Operadores
3. Cardinality estimator
Planes de ejecución
¿Sabemos interpretarlos?

Sentencia SQL Plan de ejecución


Mágia

Optimizador de
consultas

8
Operadores
¿Cuántos y cuales son?

11
Operadores
Los básicos que debes conocer

Clustered Index Clustered Index Non-clustered index


SELECT Sort Seek Scan 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

12
Operadores
¿Qué son?

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

13
DEMO
Operadores básicos

15
Procesamiento lógico
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

16
Planes de ejecución
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? 

Estimación un poco equivocada! 

17
Planes de ejecución
Comparar planes

Fíjate en los % de consulta

18
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

19
Tabla de Cursos: Tabla de Alumnos:
ID_Curso Nombre_Curso ID_Alum Nombre_Aluno ID_Curso
1Paisajismo 1Luis 2
2Fotografía 2Ana 6
3Arte Clásico 3Juan 5
4Matemáticas 4Pepe 3
5Física 5Carlos 4
6Química 6Felipe 3
7Iratxe 5
8María 4

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
...
20
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
}

21
Operadores join
Merge join
Tabla de Cursos: Tabla de Alumnos:
ID_Curso Nombre_Curso ID_Alum Nombre_Alumno ID_Curso
1Paisajismo ID_Alunos1LuísNome_Aluno ID_Cursos2
2Fotografía 1Luís
4Pepe 23
3Arte Clásico 2Ana
6Felipe 63
4Matemáticas 3Juan
5Carlos 54
5Física 4Pepe
8María 34
5Carlos 4
6Química
6Felipe 3
7Iratxe 5
8María 4

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
...
22
Operadores join
Hash join

Ejecución en dos fases


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

23
Recomendaciones

Merge Join

Hash Join
Nested Loop
• No • No • Bloqueante
bloqueante bloqueante
• Eficiencia de • Tabla inner
tabla inner • Datos muy pequeña
(arriba) ordenados
• Soporta
cualquier join • Solo equijoin
• Util cjtos
pequeños
Propiedades
DEMO
Leamos planes!

26
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 envían 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 múltiples fuentes y produce multiples fuentes


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

28
Operadores exchange
Gather streams

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


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

1. Planes de ejecución
2. Operadores
3. Cardinality estimator
Cardinality estimator
El mayor cambio en el motor “OnDisk” desde SQL Server 7.0

• Aporta el nº de registros
WHERE

Estimar selectividad del predicado


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

32
Cardinality estimator
El mayor cambio en el motor “OnDisk” desde SQL Server 7.0

• Se decide el algoritmo de obtención de datos


• Malas interpretaciones producen
• Malos planes de ejecución
• Mal rendimiento de consultas

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

Independencia Uniformidad Contenido

• Distribución 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
Inclusión mayor

• En equijoin se assume
que el valor existe

34
DEMO
Nuevo cardinality estimator

36
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

37
Preguntas?
A continuación …

Introducción a Multidimensional Expressions


(MDX) en Analysis Services Multidimensional
Alan Koo
Gracias por participar

También podría gustarte