A execução intercalada faz parte de uma família de recursos no processador de consultas de 2017 que consiste em:
- Junções adaptáveis do modo de lote
- Execução intercalada
- Feedback de concessão de memória do modo de lote
Então, como funciona a execução intercalada?
Variável O Diabo Está Na Mesa
A execução intercalada visa corrigir a cardinalidade mal estimada em Funções de valor de tabela de múltiplas instruções.
Nas versões anteriores do SQL Server, essas funções sempre produziam estimativas de má qualidade:
Escusado será dizer que isso pode causar muitos problemas ao ingressar em outras tabelas.
Embora a seleção de dados de uma variável de tabela não iniba o paralelismo por si só, as estimativas de linhas baixas geralmente contribuem para custos de consulta baixos, onde o paralelismo não seria considerado.
Com a execução intercalada, a estimativa de cardinalidade é pausada, a subárvore para o MSTVF é executada e a otimização é retomada com uma estimativa de cardinalidade mais precisa.
Como sei se meu MSTVF recebe execução intercalada.
Como com Adaptive Joins, a execução intercalada é indicada no plano de consulta. Ao contrário das Adaptive Joins, isso não é observado nos planos estimados, pelo menos até o momento da redação deste artigo.
A forma do plano para um MSTVF com execução intercalada é um pouco diferente de um plano típico que possui um MSTVF.
Você verá o operador Table Valued Function na parte superior do plano e a varredura da Table Variable onde o operador TVF normalmente estaria no plano gráfico.
Ao passar o mouse sobre o operador TVF, você verá o atributo
IsInterleavedExecuted
definido como True, bem como um número estimado de linhas que podem refletir quase a realidade. Viva.Existem eventos estendidos para solucionar problemas quando a execução intercalada não ocorre?
Sim, um monte:
Observe que alguns deles estão no canal Debug, que não é selecionado por padrão ao pesquisar Eventos a serem estendidos.
A execução intercalada requer índices ColumnStore?
Não, eles vão funcionar de qualquer maneira. Aqui está um exemplo:
Cada uma dessas consultas se junta a diferentes tabelas. Uma ColumnStore, outra não. Ambos recebem planos de execução intercalada.
Quando a execução intercalada funciona?
No momento, só funciona com MSTVFs onde a correlação é feita fora da função.
Aqui estão alguns exemplos:
Esta função não tem correlação interna, o que significa que não há
WHERE
cláusula predicada em uma coluna da tabela e uma variável passada.Esta função é o oposto, com um predicado na
UserId
coluna com uma variável passada.É um equívoco comum que
CROSS APPLY
não vai funcionar. A limitação real é notada anteriormente. A correlação de função interna é o disjuntor do negócio.