Descrever o processamento inteligente de consultas
No SQL Server 2017 e 2019, e com o Azure SQL, a Microsoft introduziu muitos recursos novos nos níveis de compatibilidade 140 e 150. Muitos desses recursos corrigem o que antes eram anti-padrões, como o uso de funções de valor escalar definidas pelo usuário e o uso de variáveis de tabela.
Esses recursos se dividem em algumas famílias de recursos:
O processamento inteligente de consultas inclui recursos que melhoram o desempenho da carga de trabalho existente com o mínimo esforço de implementação.
Para tornar as cargas de trabalho automaticamente elegíveis para processamento inteligente de consultas, altere o nível de compatibilidade do banco de dados aplicável para 150. Por exemplo:
ALTER DATABASE [WideWorldImportersDW] SET COMPATIBILITY_LEVEL = 150;
Processamento de consultas adaptável
O processamento adaptativo de consultas inclui muitas opções que tornam o processamento de consultas mais dinâmico, com base no contexto de execução de uma consulta. Essas opções incluem vários recursos que melhoram o processamento de consultas.
Junções adaptáveis – o mecanismo de banco de dados adia a escolha de junção entre loops hash e aninhados com base no número de linhas que entram na junção. Atualmente, as junções adaptáveis só funcionam no modo de execução em lote.
Execução Intercalada – Atualmente, este recurso suporta funções com valor de tabela de várias instruções (MSTVF). Antes do SQL Server 2017, as MSTVFs usavam uma estimativa de linha fixa de uma ou 100 linhas, dependendo da versão do SQL Server. Essa estimativa pode levar a planos de consulta subótimos se a função retornar muito mais linhas. Uma contagem de linhas real é gerada a partir do MSTVF antes que o resto do plano seja compilado com execução intercalada.
Comentários de concessão de memória – O SQL Server gera uma concessão de memória no plano inicial da consulta, com base em estimativas de contagem de linhas a partir de estatísticas. A distorção grave de dados pode levar a superestimativas ou subestimativas de contagens de linhas, o que pode causar concessões excessivas de memória que diminuem a simultaneidade, ou subconcessões que podem fazer com que a consulta derrame dados para tempdb. Com o Memory Grant Feedback, o SQL Server deteta essas condições e diminui ou aumenta a quantidade de memória concedida à consulta para evitar o derramamento ou a superalocação.
Todos esses recursos são ativados automaticamente no modo de compatibilidade 150 e não exigem outras alterações para serem habilitados.
Compilação diferida da variável de tabela
Como MSTVFs, as variáveis de tabela nos planos de execução do SQL Server carregam uma estimativa de contagem de linhas fixa de uma linha. Assim como os MSTVFs, essa estimativa fixa levou a um desempenho ruim quando a variável teve uma contagem de linhas muito maior do que o esperado. Com o SQL Server 2019, as variáveis de tabela agora são analisadas e têm uma contagem de linhas real. A compilação adiada é semelhante em natureza à execução intercalada para MSTVFs, exceto que é executada na primeira compilação da consulta em vez de dinamicamente dentro do plano de execução.
Modo de lote no armazenamento de linha
O modo de execução em lote permite que os dados sejam processados em lotes em vez de linha por linha. As consultas que incorrem em custos significativos de CPU para cálculos e agregações verão o maior benefício desse modelo de processamento. Ao separar o processamento em lote e os índices columnstore, mais cargas de trabalho podem se beneficiar do processamento em modo batch.
Função escalar definida pelo usuário inlining
Em versões mais antigas do SQL Server, as funções escalares tiveram um desempenho insatisfatório por vários motivos. As funções escalares foram executadas iterativamente, processando efetivamente uma linha de cada vez. Eles não tinham estimativa de custo adequada em um plano de execução e não permitiam paralelismo em um plano de consulta. Com o inlining de função definido pelo usuário, essas funções são transformadas em subconsultas escalares no lugar do operador de função definido pelo usuário no plano de execução. Essa transformação pode levar a ganhos significativos no desempenho para consultas que envolvem chamadas de função escalar.
Contagem aproximada distinta
Um padrão comum de consulta de data warehouse é executar uma contagem distinta de ordens ou usuários. Esse padrão de consulta pode ser caro em uma tabela grande. A contagem aproximada distinta introduz uma abordagem muito mais rápida para reunir uma contagem distinta agrupando linhas. Esta função garante uma taxa de erro de 2% com um intervalo de confiança de 97%.