Estou tendo alguns problemas de desempenho em um sistema de processamento de dados no qual estou trabalhando. Reuni estatísticas de espera de um período de uma hora que mostram uma grande quantidade de eventos de espera CXPACKET e LATCH_EX.
O sistema consiste em 3 servidores SQL de processamento, que realizam muitos cálculos e cálculos de números e, em seguida, alimentam os dados em um servidor de cluster central. Os servidores de processamento podem ter até 6 trabalhos em execução, cada um de cada vez. Essas estatísticas de espera são para o cluster central, que eu acho que está causando um gargalo. O servidor de cluster central possui 16 núcleos e 64 GB de RAM. MAXDOP está definido como 0.
Eu acho que o CXPACKET é de várias consultas paralelas em execução, no entanto, não tenho certeza do que o evento de espera LATCH_EX está indicando. Pelo que li isso poderia ser uma espera sem buffer?
Alguém pode sugerir qual seria a causa desse tipo de estatísticas de espera e que curso de ação eu deveria tomar para investigar a causa raiz desse problema de desempenho?
Os principais resultados da consulta são as estatísticas totais de espera e o resultado inferior da consulta são as estatísticas do período de 1 hora
Respostas:
O CXPACKET pode ser acompanhado com um LATCH_XX (possivelmente com PAGEIOLATCH_XX ou SOS_SCHEDULER_YIELD). Se for esse o caso (e acredito que seja, com base na pergunta), o valor MAXDOP deve ser reduzido para se adequar ao seu hardware.
Além disso, aqui estão algumas etapas mais recomendadas para diagnosticar a causa dos altos valores de estatísticas de espera do CXPACKET (antes de alterar algo no SQL Server):
Não defina MAXDOP como 1, pois essa nunca é a solução
Investigue a consulta e o histórico do CXPACKET para entender e determinar se ocorreu algo uma ou duas vezes, pois pode ser apenas a exceção no sistema que normalmente está funcionando corretamente
Verifique os índices e estatísticas nas tabelas usadas pela consulta e verifique se estão atualizados
Verifique o limite de custo para paralelismo (CTFP) e verifique se o valor usado é apropriado para o seu sistema
Verifique se o CXPACKET é acompanhado por um LCK_M_XX (geralmente acompanhado por IO_COMPLETION e ASYNC_IO_COMPLETION). Se for esse o caso, o paralelismo não é o gargalo. Solucionar problemas dessas estatísticas de espera para encontrar a causa raiz do problema e solução
Se você realmente precisa entender o tipo CXPACKET espera em profundidade, eu aconselho a leitura da Resolução de problemas do tipo CXPACKET espera no SQL Server artigo
fonte
Leia Diagnosticando e resolvendo contenções de trava no SQL Server , é o artigo mais abrangente sobre o assunto. Você precisará pesquisar
sys.dm_os_latch_stats
e ver em que tipo de trava está a contenção.Veja se ler Como analisar o desempenho do SQL Server o ajuda de alguma maneira.
fonte
Além de ler os links fornecidos acima e provavelmente alterar a configuração "Máximo grau de paralelismo" de 0 para algo como 8, convém restringir quais de suas consultas estão paralelas e qual é o custo.
Depois de ver o impacto dessa alteração, você também pode modificar seu "Limiar de custo para paralelismo" para ajustar o que será paralelo.
Aqui está um ótimo vídeo de Brent Ozar que irá ajudá-lo: Dominar a arte do CXPACKET e MAXDOP
Sua meta é <= 50% por cento do tempo de espera para o CXPACKET. Boa sorte!!
fonte