Upload
solidq
View
800
Download
2
Tags:
Embed Size (px)
Citation preview
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
Agenda
Paralelismo
Operadores Exchange
Enemigos del paralelismo
Paralelismo y memoria
Bonus final
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
Mejora lineal con el nº de CPU en scans No solo select, tambien reconstrucciones de índices por ejemplo
Paralelismo
Beneficios
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
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))
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
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
Affinity Mask
Network affinity
8000
8001
8002
8003
DEMO DEMO Configuraciones paralelismo
-MAXDOP
-Threshold for parallelism
…
Agenda
Paralelismo
Operadores Exchange
Enemigos del paralelismo
Paralelismo y memoria
Bonus final
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
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
Consume múltiples hilos y produce un único hilo
Combina resultados
Es el que mayor % de esperas suele generar
Operadores exchange
Gather streams
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?
Paralelismo Productor - consumidor
Productores Consumidores
Serie Serie Paralelo
Paralelismo
Concepto de CXPACKET
DEMO DEMO Detectando problemas de paralelismo
-Extended events
-paralelismo y funciones
-paralelismo y cross apply
-paralelismo y particionado
Agenda
Paralelismo
Operadores Exchange
Enemigos del paralelismo
Paralelismo y memoria
Bonus final
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
Enemigos del paralelismo
Elementos que hacen un plan subóptimo
CTEs
Recursivas
UDFs
escondidas
TOP TVFs
DEMO DEMO Enemigos del paralelismo
Agenda
Paralelismo
Operadores Exchange
Enemigos del paralelismo
Paralelismo y memoria
Bonus final
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
DEMO DEMO Ordenaciones en paralelo
Agenda
Paralelismo
Operadores Exchange
Enemigos del paralelismo
Paralelismo y memoria
Bonus final
¿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
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
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
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
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: