Sintomas
Considere o seguinte cenário:
- Você tem uma tabela que tem índices columnstore clusterizados e a tabela tem muitas colunas (em centenas).
- Os dados (tipo de dados) dessas colunas são dados altamente compressíveis, como varchar.
- Você executa uma instrução SELECT nessa tabela para selecionar um subconjunto grande ou todas as colunas dessa tabela.
- Sua instrução select tem uma cláusula WHERE que limita a saída dela a algumas linhas (a consulta é altamente seletiva).
Nesse cenário, você pode encontrar qualquer um dos seguintes sintomas ou todos os seguintes:
- A carga de trabalho simultânea (outras consultas executadas ao mesmo tempo no servidor que esta consulta) pode encontrar diminuição no desempenho e perda de taxa de transferência.
- Você pode observar um alto uso intermitente da CPU.
- Se você consultar sys.dm_os_ring_buffers e exibir entradas do tipo SchedulerMonitor, encontrará mensagens intermitentes de "agendador sem rendimento" registradas durante o tempo de execução dessa consulta.
- Você pode receber um erro de agendador sem rendimento no log de erros e um arquivo de despejo de memória de sintoma pode ser gerado.
Resolução
O problema foi corrigido pela primeira vez na seguinte atualização cumulativa do SQL Server:
Recomendação: instalar a atualização cumulativa mais recente para o SQL Server
Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Recomendamos que você baixe e instale as atualizações cumulativas mais recentes para o SQL Server:
Mais informações
Detalhes da correçãoOs trabalhadores que processam os segmentos de coluna (descompactando-os e verificando-os para qualificar linhas) costumavam "ceder" o uso da CPU para outros trabalhos/execuções simultâneas de consulta quando um determinado número limite de linhas era gerado. Quando a cláusula WHERE era altamente seletiva para produzir poucas linhas, os trabalhadores que processam essa consulta processavam segmentos descompactados e um grande número de segmentos (porque muito poucas linhas se qualificam) antes de desistirem da CPU de maneira cooperativa para que outros trabalhadores processassem sua carga de trabalho. Isso levou ao uso irregular da CPU e à degradação da taxa de transferência para cargas de trabalho simultâneas. A correção otimiza e melhora o algoritmo de compartilhamento de CPU para essas consultas columnstore.
Referências
Saiba mais sobre a terminologia que a Microsoft usa para descrever atualizações de software.