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

  • Login to see the comments

  • Be the first to like this

Paralelismo en sql server

  1. 1. SOLIDQ SUMMIT MADRID 2017 #SQSummit17 Enrique Catalá | Mentor | ecatala@solidq.com | @enriquecatala Sácale rendimiento a tu hardware con el paralelismo de SQL Server
  2. 2. SOLIDQ SUMMIT MADRID 2017 AGENDA
  3. 3. SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017 El tiempo computacional suele ser mas elevado, pero el tiempo efectivo suele ser menor
  4. 4. SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017
  5. 5. SOLIDQ SUMMIT MADRID 2017SOLIDQ 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
  6. 6. SOLIDQ SUMMIT MADRID 2017SOLIDQ 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
  7. 7. SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017 Massively Parallel Processing Nodos de computación con SQL conectados Arquitecturas DW petabyte (PDW, Azure SQLDW)
  8. 8. SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017 • Automáticamente detecta configuraciones NUMA y se adapta Compatible • Minimiza latencia de memoria tratando de usar la memoria local de cada nodo Data-locality • Se puede afinar manualmente Configurable
  9. 9. SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017 SQLOS Memory Node CPU Node Scheduler Worker Task SQLOS • Crea un scheduler para cada CPU lógica • Es como un gestor de recursos…OS 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)
  10. 10. SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017 Competitiva • Usa arquitectura de prioridades de procesos • Cada thread ejecuta en un slot de tiempo predeterminado • Un thread puede ser rechazado de ejecución por otro de mayor prioridad Cooperativa • Basada en listas de espera • Cada tarea se pone a si misma en lista de espera cuando necesita recurso • El mismo scheduler ejecuta hasta el final • Se previene context switching
  11. 11. SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017 Multi-Instancias Tener varias instancias en el mismo HW Licenciamiento Afinar qué cores queremos asignar de los licenciados
  12. 12. SOLIDQ SUMMIT MADRID 2017SOLIDQ 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
  13. 13. SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017 8000 8001 8002 8003
  14. 14. SOLIDQ SUMMIT MADRID 2017SOLIDQ 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
  15. 15. SOLIDQ SUMMIT MADRID 2017SOLIDQ 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
  16. 16. SOLIDQ SUMMIT MADRID 2017 DEMO
  17. 17. SOLIDQ SUMMIT MADRID 2017SOLIDQ 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 MAXDOP Limitaciones de implementacion Funciones CROSS APPLY … QUERY RESOURCE GOVERNOR BBDD INSTANCIA
  18. 18. SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017
  19. 19. SOLIDQ SUMMIT MADRID 2017SOLIDQ 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
  20. 20. SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017 Consume múltiples fuentes y produce multiples fuentes No se modifican las filas Se reducen filas si aparece un operador bitmap
  21. 21. SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017 Consume múltiples hilos y produce un único hilo Combina resultados Es el que genera el famoso CXPACKET wait
  22. 22. SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017 Type # producer threads # consumer threads Gather Streams DOP 1 Repartition Streams DOP DOP Distribute Streams 1 DOP
  23. 23. SOLIDQ SUMMIT MADRID 2017SOLIDQ SUMMIT MADRID 2017 Serial SerialParallel
  24. 24. SOLIDQ SUMMIT MADRID 2017 DEMO
  25. 25. SOLIDQ SUMMIT MADRID 2017SOLIDQ 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
  26. 26. SOLIDQ SUMMIT MADRID 2017SOLIDQ 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
  27. 27. SOLIDQ SUMMIT MADRID 2017SOLIDQ 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?
  28. 28. SOLIDQ SUMMIT MADRID 2017 AGENDA
  29. 29. SOLIDQ SUMMIT MADRID 2017 Gracias!

×