Eu tenho um servidor com 16 CPUs configurado com max degree of parallelism
8 e max worker threads
zero.
Por uma determinada hora, minhas esperas de sinal foram de 20%, mas a utilização da CPU do meu sistema operacional durante esse período nunca ultrapassou 25%. Alguém pode explicar por que minhas esperas de sinal eram tão altas?
Meu fornecedor tem o melhor sistema de pontuação da categoria que espera que tenhamos 10% ou menos de espera de sinal, ou seremos prejudicados. Como posso corrigir isso (sem adicionar CPUs adicionais)?
- Não temos mais de 8 CPUs por nó NUMA, portanto, o sinalizador de rastreamento 8048 não se aplica.
- As maiores esperas de instância são
CXPACKET
(70%), entãoPREEMPTIVE_OS_PIPEOPS
(20%) cost threshold for parallelism
é definido como 50. Devo aumentá-lo? Para quê?- Esta é uma máquina física (não uma VM), dedicada ao SQL Server.
- Estou usando uma ferramenta de monitoramento para identificar as consultas e procedimentos executados com mais frequência. Eu quero olhar para alta CPU, alta E/S ou alta duração? Normalmente, nosso aplicativo é intensivo em I/O, então eu ajustei I/O alto. Mas, como o problema é a espera de sinal, preciso observar a CPU alta?
- Eu esperava evitar a recomendação de Max Vernon para reduzir
MAXDOP
para 4, porque o aplicativo faz algumas consultas de estilo de armazém que precisam de threads extras.
Resposta do Wiki da comunidade gerada a partir de comentários sobre a pergunta de Aaron .
A menos que você esteja tendo problemas de desempenho, a alta porcentagem de
CXPACKET
esperas pode ser apenas um indicador de que uma grande parte das consultas está ocorrendo em paralelo e não é realmente um problema.CPU alta pode ser um indicador, mas pelo que você explicou, eu diria que observe consultas com durações longas, mas CPU baixa para começar. Às vezes, a
CXPACKET
espera é associada a uma consulta que aguarda a conclusão de todos os encadeamentos antes de poder mesclar os resultados (distorção de dados).Se você puder modificar as consultas e procedimentos, poderá definir um valor mais alto
MAXDOP
para as tarefas de depósito que precisam dele e definir o nível globalMAXDOP
mais baixo. No entanto, eu só faria isso como último recurso. Você realmente deseja fazer esses tipos de dicas explícitas quando tiver esgotado todas as possibilidades ou não puder fazer alterações no código, consultas ou esquemas de banco de dados.