Tengo un servidor con 16 CPU que está configurado con un max degree of parallelism
8 y una max worker threads
configuración de cero.
Durante una hora determinada, mis esperas de señal fueron del 20%, pero la utilización de mi CPU del sistema operativo durante ese tiempo nunca superó el 25%. ¿Alguien puede explicar por qué mi señal de espera fue tan alta?
Mi proveedor tiene el mejor sistema de puntaje en su clase que espera que tengamos un 10% o menos de espera de señal, o que nos critiquen. ¿Cómo puedo solucionar esto (sin agregar CPU adicionales)?
- No tenemos más de 8 CPU por nodo NUMA, por lo que Trace Flag 8048 no se aplica.
- Las esperas de instancia más grandes son
CXPACKET
(70%), luegoPREEMPTIVE_OS_PIPEOPS
(20%) cost threshold for parallelism
está establecido en 50. ¿Debo subirlo? ¿A qué?- Esta es una máquina física (no una VM), dedicada a SQL Server.
- Estoy usando una herramienta de monitoreo para identificar las consultas y procedimientos que se ejecutan con mayor frecuencia. ¿Quiero mirar CPU alta, E / S alta o alta duración? Normalmente nuestra aplicación es de E / S intensiva, por lo que sintonizo E / S altas. Pero dado que el problema es la espera de la señal, ¿tengo que mirar a la CPU alta?
- Esperaba evitar la recomendación de Max Vernon de bajar
MAXDOP
a 4, porque la aplicación realiza algunas consultas de estilo de almacén que necesitan hilos adicionales.
sql-server
performance
Chris Woods
fuente
fuente
Respuestas:
Respuesta de Community Wiki generada a partir de comentarios sobre la pregunta de Aaron .
A menos que tenga problemas de rendimiento, el alto porcentaje de
CXPACKET
esperas solo puede ser un indicador de que una gran parte de las consultas van en paralelo y no son realmente un problema.La CPU alta podría ser un indicador, pero por lo que ha explicado, diría que busque consultas con duraciones largas pero CPU baja para comenzar. La
CXPACKET
espera a veces se asocia con una consulta que espera a que finalicen todos los subprocesos antes de poder fusionar los resultados (sesgo de datos).Si puede modificar las consultas y los procedimientos, puede establecer un valor más alto
MAXDOP
para las tareas de almacén que lo necesitan y un valor globalMAXDOP
más bajo. Sin embargo, solo haría eso como último recurso. Realmente solo desea hacer ese tipo de sugerencias explícitas cuando haya agotado todas las posibilidades o no pueda realizar cambios en el código, las consultas o los esquemas de la base de datos.fuente