Baja utilización de CPU pero alta espera de señal

8

Tengo un servidor con 16 CPU que está configurado con un max degree of parallelism8 y una max worker threadsconfiguració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%), luego PREEMPTIVE_OS_PIPEOPS(20%)
  • cost threshold for parallelismestá 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 MAXDOPa 4, porque la aplicación realiza algunas consultas de estilo de almacén que necesitan hilos adicionales.
Chris Woods
fuente
Gracias Aaron! Buscaré consultas con alta duración y baja CPU.
Chris Woods, el

Respuestas:

2

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 CXPACKETesperas 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 CXPACKETespera 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 MAXDOPpara las tareas de almacén que lo necesitan y un valor global MAXDOPmá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.

Paul White
fuente