Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Como leer planes de ejecución - edición 2015

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.

Si quieres aprender más sobre Cómo hacer Planes de Negocio, impartiré un seminario el 16 de Febrero en formato clases virtuales presenciales (100% online). Aquí os dejo un enlace del seminario: http://training.solidq.com/es/class/es-1432/

  • Login to see the comments

  • Be the first to like this

Como leer planes de ejecución - edición 2015

  1. 1. Como leer planes de ejecución Enrique Catala Bañuls MVP , Mentor SolidQ ecatala@solidq.com | enrique@enriquecatala.com Twitter: @enriquecatala www.enriquecatala.com
  2. 2. 3 Sponsor Sessions at 11:15  Don’t miss them, they might be getting distributing some awesome prizes!  HP  SolidQ  Pyramid Analytics  Also Raffle prizes at the end of the event provided by HP, SolidQ, Pyramid Analytics, Altran & Microsoft
  3. 3. Our Main Sponsors:
  4. 4. Agenda  Repaso rápido  Generación de planes  Procesamiento lógico  Operadores join  Operadore exchange  Demos!
  5. 5. Planes de ejecución ¿Sabemos interpretarlos? 5 Optimizador de consultas Sentencia SQL Plan de ejecución Mágia
  6. 6. Generación de plan de ejecución  El optimizador utiliza dos tipos de clave  Tiempo E/S: Coste de leer páginas de un subsistema de disco  Tiempo CPU: Coste de aplicar predicados y tuplas en memoria Estimación de costes
  7. 7. Generación de plan de ejecución  En cada join, se incrementa exponencialmente el nº de soluciones posibles Cuidado con el timeout!
  8. 8. Visualizar plan de ejecución SELECT * FROM dbo.Pedidos p INNER JOIN dbo.Items i ON p.ID_Pedido = i.ID_Pedido INNER JOIN dbo.Clientes c ON p.ID_Cliente = c.ID_Cliente INNER JOIN dbo.Produtos p ON i.ID_Produto = p.ID_Produto Para no Clikear presionar CTRL-L
  9. 9. Operadores ¿Qué son? 10  Casi todo operador funciona pidiendo filas de uno o mas hijos y devolviéndolas al que se las ha pedido Caso especial Common Table Spool Operadores columnares  Cada operador devuelve de 1 fila en 1 fila  *No todos
  10. 10. Planes de ejecución Flechas 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
  11. 11. Planes de ejecución Comparar planes 12  Fíjate en los % de consulta
  12. 12. Operadores join Nested 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
  13. 13. Operadores join Merge join 14 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 }
  14. 14. Operadores join Hash join 15  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) }
  15. 15. EQ_ROWS = Cantidad de líneas que poseen el último valor de la muestra Ej: Existen 64 líneas para la mostra 111 (línea 5) DISTINCT_RANGE_ROWS = Cantidad de valores distintos dentro de un intervalo. El valor de RANGE_HI_KEY está EXCLUIDO Ej: En la línea 5 (108 hasta 110) tenemos 3 valores distintos Debería llamarse DISTINCT_RANGE_VALUES AVG_RANGE_ROWS = Media de valores en el rango (RANGE_ROWS/ DISTINCT_RANGE_ROWS) Ej: En la linea 5 tenemos 160 / 3 = 53,33333 RANGE_HI_KEY = Valor clave de cada muestra Ej: En la línea 5 tenemos el valor 111 que va de 108 (107 (Línea 4) + 1) hasta 111 RANGE_ROWS = Cantidad de líneas que poseen valores iguales a los de la muestra excluyendo el valor de RANGE_HI_KEY Ej: La línea 5 va de 108 a 110 (excluyendo el valor 111(RANGE_HI_KEY)). Dentro de este rango tenemos 160 líneas El valor buscado (110) está entre las líneas 4 y 5 SELECT * FROM Items1 WHERE Quantity = 110 DBCC SHOW_STATISTICS (Items1, Stats_Quantity) WITH HISTOGRAM DBCC SHOW_STATISTICS
  16. 16. DEMO 18 Leamos planes!
  17. 17. Propiedades Sort
  18. 18. Propiedades Sort
  19. 19. Propiedades Key lookup
  20. 20. Propiedades Operador paralelo
  21. 21. Operadores exchange Distribute 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 index recreation 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
  22. 22. Operadores exchange Repartition streams 24  Consume múltiples fuentes y produce multiples fuentes  No se modifican las filas  Se reducen filas si aparece un operador bitmap
  23. 23. Operadores exchange Gather streams  Consume múltiples hilos y produce un único hilo  Combina resultados  Es el que mayor % de esperas suele generar
  24. 24. Procesamiento lógico De una consulta 26 1. FROM 2. WHERE 3. GROUP BY 4. HAVING 5. SELECT 1. Evaluar expresiones 2. Eliminar duplicados 6. ORDER BY 7. OFFSET-FETCH/TOP
  25. 25. Conclusión 27 1. Repasar aspectos fundamentales de operadores 2. Ser capaces de leer los planes de ejecución mas habituales
  26. 26. Como leer planes de ejecución Enrique Catala Bañuls MVP , Mentor SolidQ ecatala@solidq.com | enrique@enriquecatala.com Twitter: @enriquecatala www.enriquecatala.com

×