Quando um índice columnstore está sendo usado em uma consulta, o SQL Server pode usar o modo em lote. A documentação é fina sobre o que pode ser executado no modo de lote e o que não pode. Observe o seguinte plano de motivação (motivador) em que um número surpreendente de coisas é executado no modo em lote (verde):
(Este é um plano estimado. Utilizei o plano real para verificar se o modo de execução real é realmente um lote.)
Observe que apenas o lado da construção do T1 usa um índice columnstore. Todas as entradas do probe (T2 e T3) são armazenamentos de linha. Seus dados parecem passar para o modo em lote. Eu sempre pensei que o modo em lote estivesse sendo usado para o fluxo de dados que é executado apenas no lado do probe.
Parece que os dados podem fazer a transição para o modo em lote, mesmo que não sejam originários de um índice columnstore. Isso coloca a questão: por que o SQL Server não usa o modo em lote para consultas somente de rowstore? Pode ser benéfico para alguns deles. O uso de um índice columnstore é um requisito formal necessário para fazer o SQL Server considerar o modo em lote? Talvez possamos adicionar uma tabela fictícia de linha zero com um índice columnstore para induzir o modo em lote e obter ganhos de desempenho?
O que exatamente pode ser executado no modo de lote a partir do SQL Server 2014?
Respostas:
O SQL Server 2014 adiciona o seguinte à lista original de operadores de modo em lote:
O SQL Server 2012 foi muito limitado no uso de operadores em lote. Os planos do modo de lote tinham uma forma fixa, baseavam-se nas heurísticas e não podiam reiniciar o modo de lote após a transição para o processamento no modo de linha.
O SQL Server 2014 adiciona o modo de execução (lote ou linha) à estrutura de propriedades gerais do otimizador de consulta, o que significa que ele pode considerar a transição para dentro e fora do modo de lote em qualquer ponto do plano. As transições são implementadas pelos adaptadores do modo de execução invisível no plano. Esses adaptadores têm um custo associado a eles para limitar o número de transições introduzidas durante a otimização. Esse novo modelo flexível é conhecido como Execução de modo misto.
Os adaptadores do modo de execução podem ser vistos na saída do otimizador (embora infelizmente não esteja nos planos de execução visíveis ao usuário) com o TF 8607 não documentado. Por exemplo, o seguinte foi capturado para uma consulta que conta linhas em um armazenamento de linhas:
É hoje sim. Um possível motivo para essa restrição é que ela restringe naturalmente o processamento em modo de lote ao Enterprise Edition.
Sim, isso funciona. Também vi pessoas cruzando-se com um índice columnstore clusterizado de linha única por esse motivo. A sugestão que você fez nos comentários à esquerda de ingressar em uma tabela fictícia columnstore em false é excelente.
Planeje com junção externa esquerda simulada:
Verdade.
As melhores fontes oficiais de informações são os índices de armazenamento de colunas descritos e o ajuste de desempenho do armazenamento de colunas do SQL Server .
O MVP do SQL Server, Niko Neugebauer, tem uma série fantástica no columnstore em geral aqui .
Existem alguns bons detalhes técnicos sobre as alterações de 2014 no documento da Microsoft Research, aprimoramentos nos armazenamentos de colunas do SQL Server (pdf), embora essa não seja a documentação oficial do produto.
fonte