monitorizando y optimizando problemas de paralelismo en sql server | solidq summit 2012
TRANSCRIPT
![Page 1: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/1.jpg)
Monitorizando y optimizando problemas de paralelismo en SQL Server
Enrique Catalá Bañuls
REL300008
Mentor – Relational engine MAP 2012 – Microsoft Technical Ranger – Microsoft Certified Trainer
Enrique Puig Nouselles DPE – Relational engine MAP 2012 – Microsoft Technical Ranger – MCPIT SQL Server
![Page 2: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/2.jpg)
Agenda
Paralelismo
Operadores Exchange
Enemigos del paralelismo
Paralelismo y memoria
Bonus final
![Page 3: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/3.jpg)
SQL Server por defecto utiliza todos los cores disponibles para resolver planes de ejecución paralelos
La idea es utilizar los cores extras, para reducir el tiempo de respuesta utilizando múltiples CPUs
El tiempo computacional suele ser mas elevado, pero el tiempo efectivo suele ser menor
En sistemas OLTP puros, se suele premiar serializabilidad Pocos sistemas son OLTP puros
Consultas paralelas
Introducción
![Page 4: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/4.jpg)
Mejora lineal con el nº de CPU en scans No solo select, tambien reconstrucciones de índices por ejemplo
Paralelismo
Beneficios
![Page 5: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/5.jpg)
SQLOS Crea un scheduler por cada CPU lógica
Es como un gestor de recursos…como un SO
Scheduler Como una CPU lógica
Trabajan en modo cooperativo, no como en Windows
Facilitan “data locality”
Worker Son como “logical threads” (ejecutan tareas)
Solo un worker puede ser ejecutado por un scheduler al mismo tiempo
Task Unidad de trabajo para un worker (sentencia simple)
Asignada a un worker que no la soltará
Modelo de ejecución de SQL Server
Conceptos
SQLOS
Memory Node
CPU Node
Scheduler
Worker
Task
![Page 6: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/6.jpg)
Generación de planes de ejecución
¿Por qué un plan paralelo en OLTP no es buena señal?
Stage 0 Reglas básicas de evaluacion usando hash y nested join
Si el coste del plan es menor a 0.2 usar este plan
Stage 1 Explorar mas reglas incluso alterando el orden de los join
Stage 2 Explorar todas las opciones y optar por el plan menos
costoso tras un nº limitado de exploraciones
CUIDADO, TIEMPO LIMITADO!!! (timeout)
if(best_plan_for_now.cost<1) return(best_plan_for_now)
else if(MAXDOP>1
and best_plan.cost > threshold for parallelism)
return(MIN(create_paralel_plan().cost, best_plan_for_now))
![Page 7: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/7.jpg)
Nivel hardware NUMA
Nivel de instancia Soft-NUMA (affinity mask)
Degree of parallelism
Cost threshold for parallelism
Max worker threads
Parámetro -P
Nivel de conexión Resource Governor usando MAXDOP
Cláusula DBCC OPTIMIZE_WHATIF
Nivel de sentencia Cláusula MAXDOP
Conocimiento de construcciones T-SQL
CROSS APPLY
Funciones…
Paralelismo
Mecanismos de control
![Page 8: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/8.jpg)
Usadas para establecer qué procesadores pueden utilizarse por una instancia SQL Server
También llamado Soft-NUMA No controlan vinculación a RAM
Affinity mask
CPU Affinity mask
![Page 9: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/9.jpg)
Affinity Mask
Network affinity
8000
8001
8002
8003
![Page 10: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/10.jpg)
DEMO DEMO Configuraciones paralelismo
-MAXDOP
-Threshold for parallelism
…
![Page 11: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/11.jpg)
Agenda
Paralelismo
Operadores Exchange
Enemigos del paralelismo
Paralelismo y memoria
Bonus final
![Page 12: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/12.jpg)
Distribución de filas basada en 3 tipos 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
Operadores exchange
Distribute streams
![Page 13: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/13.jpg)
Consume múltiples fuentes y produce multiples fuentes
No se modifican las filas
Se reducen filas si aparece un operador bitmap
Operadores exchange
Repartition streams
![Page 14: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/14.jpg)
Consume múltiples hilos y produce un único hilo
Combina resultados
Es el que mayor % de esperas suele generar
Operadores exchange
Gather streams
![Page 15: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/15.jpg)
Añadir más CPU Añade más poder computacional
No resuelve problemas de rendimiento automágicamente
Escribir código multi-hilo perfecto es muy difícil Cada vez es mas fácil escribir código paralelo
El que haya trabajado con .NET 4.5 lo habrá visto
SQL Server tiene mucho camino hecho con 12+ años experiencia
Hay un coste inherente asociado al paralelismo Mover un problema a modo paralelo y viceversa conlleva un gasto
¿compensa siempre ir a modo paralelo?
Paralelismo
¿Es la solución?
![Page 16: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/16.jpg)
Paralelismo Productor - consumidor
Productores Consumidores
![Page 17: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/17.jpg)
Serie Serie Paralelo
Paralelismo
Concepto de CXPACKET
![Page 18: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/18.jpg)
DEMO DEMO Detectando problemas de paralelismo
-Extended events
-paralelismo y funciones
-paralelismo y cross apply
-paralelismo y particionado
![Page 19: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/19.jpg)
Agenda
Paralelismo
Operadores Exchange
Enemigos del paralelismo
Paralelismo y memoria
Bonus final
![Page 20: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/20.jpg)
Depende de como programemos Plan óptimo 100% paralelo
Plan subóptimo 90% paralelo
Plan subóptimo en serie
Planes subóptimos en serie SQL Server anula la posibilidad de ejecutar la consulta en paralelo
Clausulas y/o estructuras de datos que no paralelizan
Cuidado como programas!!!
Enemigos del paralelismo
Planes de ejecución subóptimos
![Page 21: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/21.jpg)
Enemigos del paralelismo
Elementos que hacen un plan subóptimo
CTEs
Recursivas
UDFs
escondidas
TOP TVFs
![Page 22: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/22.jpg)
DEMO DEMO Enemigos del paralelismo
![Page 23: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/23.jpg)
Agenda
Paralelismo
Operadores Exchange
Enemigos del paralelismo
Paralelismo y memoria
Bonus final
![Page 24: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/24.jpg)
Operaciones en memoria SORT y HASH JOIN
Memory grants
Operaciones costosas
SQL Server tiende a paralelizar
Lógico pensar que en paralelo debe ir más rápido
Distribución de filas por threads
Asignación de memoria equitativa por thread
Distribución de filas “no tan equitativa”
¿Cómo están distribuidos tus datos?
La memoria y el paralelismo
![Page 25: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/25.jpg)
DEMO DEMO Ordenaciones en paralelo
![Page 26: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/26.jpg)
Agenda
Paralelismo
Operadores Exchange
Enemigos del paralelismo
Paralelismo y memoria
Bonus final
![Page 27: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/27.jpg)
¿Cuándo aplicar MAXDOP? ALTER INDEX, Statistics operations …
Agregaciones (AVG, MAX,…)
Recuerda que existe Resource Governor
¿Cuándo aplicar “max degree of parallelism”? Recomendación = #physical_cores
Sistemas OLTP deberian configurarse a 1
Siempre que veamos alto % de esperas CXPACKET
¿Cuándo aplicar “cost threshold for parallelism? Cuando quieras cambiar el nº de operaciones paralelas
estadísticamente
Paralelismo
Buenas prácticas
![Page 28: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/28.jpg)
No hay una solución maestra!!
Si observas esperas CXPACKET reduce MAXDOP En OLTP puro pensar en 1 suele ser correcto
Considera Resource Governor
Si ves planes de ejecucion suboptimos, considera actualizar estadísticas
Re escribe la consulta para hacerla mas eficiente
Para maximizar el paralelismo evita el uso de: Tablas variables
Funciones
Consultas recursivas
Paralelismo
Buenas prácticas
![Page 29: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/29.jpg)
Trace flag 8002 Posibilitamos que los schedulers utilicen cualquier CPU en el
affinity mask Por defecto quedan vinculados a la CPU en la que fueron
creados
Trace flag 8017 Solo arrancan los schedulers in la mascara de afinidad con
is_online=1. Se liberan recursos consumidos por schedulers offline hidden
Trace flag 8021 En casos donde se reporta erroneamente el nº de nodos
NUMA, lo arregla
Trace flag 8025 SQL Server asume NUMA NODE=0 como el de mayor carga, y
se lanza sobre el 1. Este TF evita este swap
Bonus final
Trace flags interesantes
![Page 30: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/30.jpg)
Activa todas las revisiones del optimizador de consultas SQL Server trae optimizaciones del motor no activadas según CU o
SP
Esto facilita a dev de sql el que exista comportamiento predecible en cada update
Ojo, testéalo porque puede producir rendimientos no deseados
Trace flag 4199
Por defecto viene a off y debemos activarlo DBCC TRACEON(4199)
A nivel de instancia con –P4199 en sql server configuration manager
A partir de SQL Server 2005 SP3
http://support.microsoft.com/kb/974006
Bonus final
Trace flag mágico
![Page 31: Monitorizando y optimizando problemas de paralelismo en SQL Server | SolidQ Summit 2012](https://reader038.vdocument.in/reader038/viewer/2022102806/55a47fb41a28abfb458b4572/html5/thumbnails/31.jpg)
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: