INTRODUÇÃO Recentemente, estive analisando recentemente alguns tempos de espera CXPacket razoavelmente altos, que me fizeram usar o SQL Sentry para monitorar a atividade do processador de perto.
Uma coisa que notei como resultado é que temos picos enormes na alternância de contexto. Abaixo está uma amostra de 5 minutos, mas esse padrão é muito comum ao longo do dia.
Como você pode ver, os picos são bastante regulares. Agora, meu entendimento disso me levaria a acreditar que esse seria o resultado da pressão da CPU. No entanto, durante esse tempo, quase não supera os 60%.
Após algumas pesquisas, isso me levou a acreditar que isso está acontecendo como resultado da hiper-segmentação. Sei que li anteriormente alguns dos perigos da hiper-segmentação. No entanto, isso foi escrito há muito tempo.
Para resumir uma longa história. É provável que o hyper threading seja o culpado por esses picos na alternância de contexto? É possível que a alternância de contexto esteja impactando negativamente minhas consultas paralelas? Devo desativar o hyper threading no meu ambiente?
ATUALIZAÇÃO Embora essa coisa específica esteja acontecendo no meu ambiente, a questão em seu núcleo é mais universal. Qual o impacto dos altos níveis de alternância de contexto em consultas paralelas? O hyper threading pode causar esse tipo de problema?
Em última análise, a maior parte do que encontro na internet sugere que o hyper threading e o SQL Server não são bons amigos; no entanto, mais do que isso, as informações são extremamente antigas.
Meu sistema Havia muitas questões de configuração, por isso irei abordá-las aqui para que possam ser descartadas. Temos as configurações de energia no desempenho, tanto no SO quanto no nível biológico. Nosso Maxdop é definido como 8 e o limite de custo para paralelismo é 25. Temos 32 núcleos lógicos e 16 físicos. Além disso, esse é, na maior parte, um cenário de carregamento de data warehouse.
Respostas:
Frequentemente indica nada mais do que certas consultas estão sendo executadas com paralelismo; As esperas do CXPACKET no servidor não são um sinal imediato de problemas, embora possam ser o sintoma de outro problema.
Se o servidor hospedar um banco de dados ou tipo de banco de dados de relatório que recebe um baixo volume de consultas, mas processa grandes quantidades de dados, o paralelismo pode reduzir substancialmente o tempo necessário para executar essas consultas. No entanto, se o servidor hospedar um banco de dados OLTP com muitas consultas e transações pequenas, o paralelismo poderá reduzir a taxa de transferência e afetar negativamente o desempenho.
Sempre que possível, é melhor isolar e solucionar problemas do tipo de espera subjacente, pois isso levará a melhorias gerais na taxa de transferência do sistema. Novamente, as esperas do CXPACKET são simplesmente um sintoma de um problema na maioria dos casos, não o problema real
A DMV sys.dm_os_latch_stats contém informações sobre as esperas de trava específicas que ocorreram na instância e, se uma das trincas superiores aguardar, é ACCESS_METHODS_DATASET_PARENT, em conjunto com CXPACKET, LATCH_ * e SOS_SCHEDULER_YIELD, conforme o tipo de espera superior, o nível de espera superior. o paralelismo no sistema é a causa do gargalo durante a execução da consulta e a redução da opção sp_configure de 'grau máximo de paralelismo' pode ser necessária para resolver os problemas.
Este artigo da TechNet Magazine é antigo, mas diz para tentar desativar o hyperthreading se você exceder os 5000 por segundo por processador:
Otimizando o desempenho da CPU do SQL Server por Zach Nichter
fonte