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.

Paralelismo en SQL Server

En esta sesión daremos una vuelta completa al paralelismo en SQL Server, hablaremos de parámetros de configuración, planes de ejecución paralelos, operadores paralelos y mucho más. Además veremos cómo monitorizar y detectar problemas de paralelismo y las posibles soluciones.

¿Qué hace interesante esta ponencia? Aprovechar mejor el HW disponible para que el retorno de inversión sea mejor

¿Qué aprende nuestro público? Aprenderemos a entender que hay que tener presente siempre el HW sobre el que se está ejecutando nuestra consulta, para sacarle mayor provecho

  • Login to see the comments

Paralelismo en SQL Server

  1. 1. ecatala@solidq.com | @enriquecatala Enrique Catalá Bañuls @enriquecatala ecatala@solidq.com enrique@enriquecatala.com MAD · NOV 24-25 · 2017
  2. 2. AGENDA
  3. 3. Enrique Catalá Bañuls ▪ Ingeniero Informático ▪ Microsoft Data Platform MVP ▪ Mentor en SolidQ ▪ Tuning y alta disponibilidad ecatala@solidq.com www.solidq.com @enriquecatala www.enriquecatala.com ecatala@solidq.com | @enriquecatala
  4. 4. SOLIDQ SUMMIT MADRID 2017 El tiempo computacional suele ser mas elevado, pero el tiempo efectivo suele ser menor ecatala@solidq.com | @enriquecatala
  5. 5. SOLIDQ SUMMIT MADRID 2017ecatala@solidq.com | @enriquecatala
  6. 6. SOLIDQ SUMMIT MADRID 2017 Symmetric Multiprocessing System (SMP) Todas las CPU comparten la misma memoria Sin particionado HW para acceso a memoria Típico en computadoras de consumo Memory CPU CPU CPU CPU System bus CPU CPU CPU CPU SMP architecture CPU CPU CPU CPU F S B Main Memory ecatala@solidq.com | @enriquecatala
  7. 7. SOLIDQ SUMMIT MADRID 2017 Non-Uniform Memory Access Nodos conectados por bus compartido Típico en servidores de gama media-alta Shared Bus Memory Controller CPU CPU CPU CPU Memory Controller CPU CPU CPU CPU Memory Controller CPU CPU CPU CPU Memory Controller CPU CPU CPU CPU Node Controller Node Controller Node Controller Node Controller ecatala@solidq.com | @enriquecatala
  8. 8. SOLIDQ SUMMIT MADRID 2017 Massively Parallel Processing Nodos de computación con SQL conectados Arquitecturas DW petabyte (PDW, Azure SQLDW) ecatala@solidq.com | @enriquecatala
  9. 9. SOLIDQ SUMMIT MADRID 2017 SQLOS • Crea un scheduler para cada CPU lógica • Es como un gestor de recursos…OS • User-mode Scheduler • Como una CPU lógica usada por los workers Worker • Son como “threads” lógicos Task • Unidad de trabajo para un worker (sentencia simple) ecatala@solidq.com | @enriquecatala
  10. 10. SOLIDQ SUMMIT MADRID 2017 Basada en prioridades de procesos p.ej: SQLCLR Competitiva Basada en listas de espera p.ej: T-SQL Cooperativa ecatala@solidq.com | @enriquecatala
  11. 11. AGENDA
  12. 12. SOLIDQ SUMMIT MADRID 2017 Multi-Instancias Tener varias instancias en el mismo HW Licenciamiento Afinar qué cores queremos asignar de los licenciados ecatala@solidq.com | @enriquecatala
  13. 13. SOLIDQ SUMMIT MADRID 2017 Auto afinado al inicio de instancia Hasta 30% beneficio CPU > 8 cores HT Se previenen mezclas logical-only o physical only nodes
  14. 14. SOLIDQ SUMMIT MADRID 2017 8000 8001 8002 8003 ecatala@solidq.com | @enriquecatala
  15. 15. SOLIDQ SUMMIT MADRID 2017 if(best_plan_for_now.cost<1) return(best_plan_for_now) else if( and best_plan.cost > threshold for parallelism) return(MIN(create_paralel_plan().cost, best_plan_for_now)) Configuración • A todos los niveles • Instancia, BBDD, conexión y query Finalidad • Limita explicitamente el nº de CPUs que un worker puede usar para una tarea Recomendación • En entorno OLTP recomendado 1 • Afinar agregaciones y op. mantenimiento a 0 ecatala@solidq.com | @enriquecatala
  16. 16. SOLIDQ SUMMIT MADRID 2017 if(best_plan_for_now.cost<1) return(best_plan_for_now) else if(MAXDOP>0 and ) return( ) Configuración • A nivel de instancia • Sp_configure Finalidad • Cambiar estadísticamente el nº de planes de ejecución Recomendación • En entorno OLTP mínimo subir a 50 ecatala@solidq.com | @enriquecatala
  17. 17. DEMO
  18. 18. SOLIDQ SUMMIT MADRID 2017 Hardware NUMA SMP Instancia Soft-NUMA DOP Cost threshold for parallelism Max worker threads -P BBDD DOP Conexión Resource Governor Query ENABLE_PARALLEL_PLAN_PREFERENCE MAXDOP Limitaciones de implementacion Funciones CROSS APPLY … QUERY RESOURCE GOVERNOR BBDD INSTANCIA
  19. 19. SOLIDQ SUMMIT MADRID 2017ecatala@solidq.com | @enriquecatala
  20. 20. SOLIDQ SUMMIT MADRID 2017 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 Broadcast • Todas las filas se envian a todos los hilos Range • Determina a que hilo enviar la fila evaluando una funcion de rango sobre una columna • Rara y usada en algunos parallel index recreation 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
  21. 21. SOLIDQ SUMMIT MADRID 2017 Consume múltiples fuentes y produce multiples fuentes No se modifican las filas Se reducen filas si aparece un operador bitmap ecatala@solidq.com | @enriquecatala
  22. 22. SOLIDQ SUMMIT MADRID 2017 Consume múltiples hilos y produce un único hilo Combina resultados Es el que genera el famoso CXPACKET wait
  23. 23. SOLIDQ SUMMIT MADRID 2017 Type # producer threads # consumer threads Gather Streams DOP 1 Repartition Streams DOP DOP Distribute Streams 1 DOP
  24. 24. SOLIDQ SUMMIT MADRID 2017 Serial SerialParallel
  25. 25. DEMO
  26. 26. SOLIDQ SUMMIT MADRID 2017 Mala configuración DOP Mala configuración de affinidad de procesador Estadísticas desactualizadas • Generalmente problemas HW o mala configuración HW Cambios de context excesivos Malas arquitecturas de aplicación que estresan la CPU
  27. 27. SOLIDQ SUMMIT MADRID 2017 • MAXDOP = 0 • Threshold for parallelism = 5 Nunca usar la configuración por defecto • MAXDOP = 1 • Threshold for parallelism = 50 OLTP puro • MAXDOP = #’Phisical cores’ DW • MAXDOP <= #physical_cores_numa_node Regla de oro wait type name wait time (ms) requests CXPACKET 786556034 128110444 LATCH_EX 255701441 155553913 ASYNC_NETWORK_IO 129888217 19083082 PAGEIOLATCH_SH 83672746 2813207 WRITELOG 70634742 48398646 SOS_SCHEDULER_YIELD 47697175 176871743
  28. 28. SOLIDQ SUMMIT MADRID 2017 • ALTER INDEX, Statistics operations … • Agregaciones (AVG, MAX,…) • Recuerda que existe Resource Governor ¿Cuándo aplicar MAXDOP? • Recomendación = #physical_cores • Sistemas OLTP deberian configurarse a 1 • Siempre que veamos alto % de esperas CXPACKET ¿Cuándo aplicar “max degree of parallelism”? • Cuando quieras cambiar el nº de operaciones paralelas estadísticamente ¿Cuándo aplicar “cost threshold for parallelism?
  29. 29. ¿QUÉ HEMOS VISTO?
  30. 30. ecatala@solidq.com | @enriquecatala ecatala@solidq.com www.solidq.com @enriquecatala Gracias!!!

×