Espera, espera, espera
Si bien los aspectos de rendimiento y licencia son interesantes, no son el único aspecto de una carga de trabajo a tener en cuenta.
Una cosa que puede tener un impacto en la elección del procesador son los hilos de trabajo.
Hilos de trabajadores?
¡Sí compinche! Son las cosas que su SQL Server usará para ejecutar sus consultas y hacer todas las cosas de fondo que necesita hacer para mantener las cosas en forma.
Cuando te quedas sin hilos de trabajo, golpeas THREADPOOL espera
THREADPOOL?
THREADPOOL. Esta es una de las esperas más desagradables que puede tener en su servidor, junto con RESOURCE_SEMAPHORE y RESOURCE_SEMAPHORE_QUERY_COMPILE . Pero esas son esperas de memoria, y esta es una pregunta de CPU.
Volvamos a por qué esto es Wiggity Wack.
Así es como SQL Server calcula los hilos de trabajo :
Observe cómo duplicar los recuentos de núcleos no duplica Max Worker Threads, y obtiene el mismo número con 1 núcleo que con 4 núcleos. La ecuación es:512 + ((logical CPUs - 4) * 16)
Es una pena, porque cuando los recuentos de núcleos aumentan, la velocidad del reloj generalmente cae en picado una o dos generaciones atrás.
Echar un vistazo a cualquier línea reciente de chips Intel mostrará una tendencia similar.
¿Cómo sé cuántos hilos necesito?
Esto dependerá mucho de:
- Número de usuarios
- Número de consultas paralelas.
- Número de consultas en serie.
- Número de bases de datos y sincronización de datos (Mirroring, AG, copias de seguridad para el envío de registros)
- Si deja MAXDOP y CTFP en los valores predeterminados
Si no te estás quedando sin ellos hoy, probablemente estés bien.
¿Pero cómo sabes si lo eres?
Hay buenas preguntas, y hay buenas preguntas, y déjame decirte algo, esa es una GRAN PREGUNTA .
THREADPOOL puede manifestarse como problemas de conexión , y es posible que vea mensajes en el registro de errores acerca de no poder generar un hilo .
También puede ver las estadísticas de espera de su servidor utilizando una herramienta gratuita como sp_Blitz o sp_BlitzFirst (divulgación completa, contribuyo a este proyecto).
EXEC sp_Blitz
EXEC sp_BlitzFirst @SinceStartup = 1
¿No puedo simplemente aumentar Max Worker Threads?
El aumento de MWT puede conducir a mayores SOS_SCHEDULER_YIELD
esperas
Ese no es el fin del mundo, pero piense en ello como agregar un buncha gritando a los niños a la clase de un maestro.
De repente, será más difícil para cada niño llamar la atención.
Cuando un proceso agota su cuántica de 4 ms , potencialmente habrá más subprocesos por delante esperando para entrar en la CPU.
El rendimiento puede sentirse casi igual.
¿Cómo puedo usar menos hilos de trabajo?
¡Eres cruel [sustantivo] de un [sustantivo], esos son trabajadores con familias que mantener! Hipotecas! ¡Sueños!
Pero bien, tengo que respetar el resultado final. Tú eres el jefe.
El lugar más fácil para comenzar es cambiar la configuración como MAXDOP y Umbral de costo para paralelismo de los valores predeterminados.
Si tiene preguntas sobre cómo configurarlas, diríjase aquí:
Después de eso, su trabajo se vuelve mucho más difícil. Tienes que descubrir qué está usando todos esos hilos. A veces puedes hacerlo mirando tus estadísticas de espera.
Más específicamente, si tiene altas esperas en el paralelismo ( CXPACKET
) Y altas esperas en los bloqueos ( LCK_
), entonces es posible que se encuentre con largas cadenas de bloqueo que involucran consultas paralelas.
¿Sabes qué apesta? Si bien todas esas consultas paralelas esperan obtener sus bloqueos, no devuelven sus hilos asignados.
Casi puede escuchar esa VM de cuatro núcleos que su administrador le aseguró que era más que suficiente para cualquier carga de trabajo que contenía aire, ¿eh?
Desafortunadamente, el tipo de consulta y ajuste de índice que tiene que hacer para resolver esas cosas está más allá del alcance de la pregunta.
¡Espero que esto ayude!