Processamento inteligente de consultas em bancos de dados SQL

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

A família de recursos IQP (processamento de consulta inteligente) inclui recursos de amplo impacto que melhoram o desempenho de cargas de trabalho existentes com esforço mínimo de implementação na adoção. O gráfico a seguir detalha a família de recursos IQP e quando eles foram introduzidos pela primeira vez para o SQL Server. Todos os recursos IQP estão disponíveis na Instância Gerenciada de SQL do Azure e no Banco de Dados SQL do Azure. Alguns recursos dependem do nível de compatibilidade do banco de dados.

Diagram of the Intelligent Query Processing family of features and when they were first introduced to SQL Server.

Assista a este vídeo para obter uma visão geral do processamento de consulta inteligente:

Para demonstrações e código de exemplo de recursos de processamento de consulta inteligente (IQP) no GitHub, visite https://aka.ms/IQPDemos.

Você pode deixar as cargas de trabalho automaticamente qualificadas para o processamento de consulta inteligente habilitando o nível de compatibilidade do banco de dados aplicável. Você pode definir isso usando o Transact-SQL. Por exemplo:

ALTER DATABASE [WideWorldImportersDW] SET COMPATIBILITY_LEVEL = 160;

A tabela a seguir detalha todos os recursos de processamento de consulta inteligente, juntamente com todos os requisitos para o nível de compatibilidade do banco de dados. Para obter detalhes completos sobre todos os recursos IQP, incluindo notas de versão e descrições mais detalhadas, veja Detalhes do recurso de processamento de consulta inteligente (IQP).

Recursos IQP para Banco de Dados SQL do Azure e SQL Server 2022 (16.x)

Recurso IQP Com suporte no Banco de Dados SQL do Azure Com suporte no SQL Server 2022 (16.x) Descrição
Junções adaptáveis (Modo de Lote) Sim, com compatibilidade do banco de dados de nível 140 ou superior Sim, no SQL Server 2017 (14.x ou versões posteriores) com compatibilidade do banco de dados de nível 140 As junções adaptáveis selecionam automaticamente um tipo de junção durante o runtime com base nas linhas de entrada reais.
Distinção de contagem aproximada Yes Sim, no SQL Server 2019 (versão 15.x ou posteriores) Forneça o COUNT DISTINCT aproximado para cenários de big data com o benefício de alto desempenho e baixo volume de memória.
Percentil aproximado Sim, com compatibilidade do banco de dados de nível 110 ou superior Sim, no SQL Server 2022 (16.x ou versões posteriores) com nível de compatibilidade 110 Calcule rapidamente percentis para um conjunto de dados grande com limites de erro aceitáveis baseados em classificação para ajudar a tomar decisões rápidas usando funções de agregação de percentil aproximadas.
Modo de Lote no Rowstore Sim, com compatibilidade do banco de dados de nível 150 ou superior Sim, no SQL Server 2019 (15.x ou versões posteriores) com nível de compatibilidade 150 Forneça o modo de lote para cargas de trabalho de DW relacionais vinculados à CPU sem exigir índices columnstore.
Feedback da CE (estimativa de cardinalidade) Nenhum Sim, no SQL Server 2022 (16.x ou versões posteriores) com nível de compatibilidade 160 Ajusta automaticamente as estimativas de cardinalidade para consultas repetidas de modo a otimizar cargas de trabalho em que pressuposições de CE ineficientes causam baixo desempenho da consulta. Os comentários da CE identificarão e usarão uma suposição de modelo mais adequada a uma determinada distribuição de consulta e de dados para aprimorar a qualidade do plano de execução de consulta.
Comentários sobre graus de paralelismo (DOP) Sim*, com compatibilidade do banco de dados de nível 160 ou superior Sim, no SQL Server 2022 (16.x ou versões posteriores) com nível de compatibilidade 160 Ajusta automaticamente o grau de paralelismo de consultas repetidas de modo a otimizar para cargas de trabalho em que o paralelismo ineficiente pode causar problemas de desempenho. Requer que o Repositório de Consultas esteja habilitado.
Execução intercalada Sim, com compatibilidade do banco de dados de nível 140 ou superior Sim, no SQL Server 2017 (14.x ou versões posteriores) com compatibilidade do banco de dados de nível 140 Usa a cardinalidade real da função com valor de tabela de várias instruções encontrada na primeira compilação em vez de uma estimativa fixa.
Feedback de concessão de memória (Modo de Lote) Sim, com compatibilidade do banco de dados de nível 140 ou superior Sim, no SQL Server 2017 (14.x ou versões posteriores) com compatibilidade do banco de dados de nível 140 Se uma consulta de modo de lote tiver operações que são despejadas no disco, aumente a memória para execuções consecutivas. Se uma consulta gastar > 50% da memória alocada para ela, reduza o tamanho da concessão de memória para execuções consecutivas.
Feedback de concessão de memória (Modo de Linha) Sim, com compatibilidade do banco de dados de nível 150 ou superior Sim, no SQL Server 2019 (15.x ou versões posteriores) com compatibilidade do banco de dados de nível 150 Se uma consulta de modo de linha tiver operações que são despejadas no disco, aumente a memória para execuções consecutivas. Se uma consulta gastar > 50% da memória alocada para ela, reduza o tamanho da concessão de memória para execuções consecutivas.
Feedback de concessão de memória (Percentil) Sim, habilitado em todos os bancos de dados Sim, no SQL Server 2022 (16.x ou versões posteriores) com compatibilidade do banco de dados de nível 140 Aborda as limitações existentes de feedback de concessão de memória de forma não intrusiva, incorporando a execução de consultas anteriores para refinar o feedback.
Persistência de feedback de concessão de memória Sim, habilitado em todos os bancos de dados Sim, no SQL Server 2022 (16.x ou versões posteriores) com compatibilidade do banco de dados de nível 140 Fornece uma nova funcionalidade para persistir o feedback de concessão de memória. Requer que o Repositório de Consultas esteja habilitado e no modo READ_WRITE.
Persistência de feedback da CE Nenhum Sim, no SQL Server 2022 (16.x e versões posteriores) com nível de compatibilidade do banco de dados 160 Requer que o Repositório de Consultas esteja habilitado e no modo READ_WRITE.
Persistência de feedback do DOP Nenhum Sim, no SQL Server 2022 (16.x e versões posteriores) com nível de compatibilidade do banco de dados 160 Requer que o Repositório de Consultas esteja habilitado e no modo READ_WRITE.
Forçar o plano otimizado Nenhum Sim, no SQL Server 2022 (16.x ou versões posteriores). Reduz a sobrecarga de compilação para repetir consultas forçadas. Para obter mais informações, confira Imposição de plano otimizado com Repositório de Consultas.
Inlining de UDF escalar Sim, com compatibilidade do banco de dados de nível 150 ou superior Sim, no SQL Server 2019 (15.x ou versões posteriores) com compatibilidade do banco de dados de nível 150 Os UDFs escalares são transformados em expressões relacionais equivalentes que são "embutidas" na consulta que fez a chamada, geralmente resultando em ganhos significativos de desempenho.
Otimização do Plano de Sensibilidade de Parâmetro Nenhum Sim, no SQL Server 2022 (16.x e versões posteriores) com nível de compatibilidade do banco de dados 160 A Otimização do Plano de Sensibilidade de Parâmetro aborda o cenário em que um só plano armazenado em cache para uma consulta parametrizada não é ideal para todos os valores de parâmetro de entrada possíveis, por exemplo, para distribuições de dados não uniformes.
Compilação Adiada de Variável da Tabela Sim, com compatibilidade do banco de dados de nível 150 ou superior Sim, no SQL Server 2019 (15.x ou versões posteriores) com compatibilidade do banco de dados de nível 150 Usa a cardinalidade real da variável de tabela encontrada na primeira compilação em vez de uma estimativa fixa.

No momento, o * Feedback de DOP está disponível no Banco de Dados SQL do Azure como uma visualização limitada. Para obter mais informações e ver como se candidatar à versão prévia, confira Comunicado dos Comentários do DOP Versão prévia limitado.

Recursos IQP para a Instância Gerenciada de SQL do Azure

Recurso IQP Com suporte na Instância Gerenciada de SQL do Azure Descrição
Junções adaptáveis (Modo de Lote) Sim, com compatibilidade do banco de dados de nível 140 ou superior As junções adaptáveis selecionam automaticamente um tipo de junção durante o runtime com base nas linhas de entrada reais.
Distinção de contagem aproximada Yes Forneça o COUNT DISTINCT aproximado para cenários de big data com o benefício de alto desempenho e baixo volume de memória.
Percentil aproximado Sim, com compatibilidade do banco de dados de nível 110 ou superior Calcule rapidamente percentis para um conjunto de dados grande com limites de erro aceitáveis baseados em classificação para ajudar a tomar decisões rápidas usando funções de agregação de percentil aproximadas.
Modo de Lote no Rowstore Sim, com compatibilidade do banco de dados de nível 150 ou superior Forneça o modo de lote para cargas de trabalho de DW relacionais vinculados à CPU sem exigir índices columnstore.
Feedback da CE (estimativa de cardinalidade) Nenhum Ajusta automaticamente as estimativas de cardinalidade para consultas repetidas de modo a otimizar cargas de trabalho em que pressuposições de CE ineficientes causam baixo desempenho da consulta. Os comentários da CE identificarão e usarão uma suposição de modelo mais adequada a uma determinada distribuição de consulta e de dados para aprimorar a qualidade do plano de execução de consulta.
Comentários sobre graus de paralelismo (DOP) Nenhum Ajusta automaticamente o grau de paralelismo de consultas repetidas de modo a otimizar para cargas de trabalho em que o paralelismo ineficiente pode causar problemas de desempenho. Requer que o Repositório de Consultas esteja habilitado.
Execução intercalada Sim, com compatibilidade do banco de dados de nível 140 ou superior Usa a cardinalidade real da função com valor de tabela de várias instruções encontrada na primeira compilação em vez de uma estimativa fixa.
Feedback de concessão de memória (Modo de Lote) Sim, com compatibilidade do banco de dados de nível 140 ou superior Se uma consulta de modo de lote tiver operações que são despejadas no disco, aumente a memória para execuções consecutivas. Se uma consulta gastar > 50% da memória alocada para ela, reduza o tamanho da concessão de memória para execuções consecutivas.
Feedback de concessão de memória (Modo de Linha) Sim, com compatibilidade do banco de dados de nível 150 ou superior Se uma consulta de modo de linha tiver operações que são despejadas no disco, aumente a memória para execuções consecutivas. Se uma consulta gastar > 50% da memória alocada para ela, reduza o tamanho da concessão de memória para execuções consecutivas.
Feedback de concessão de memória (Percentil) Nenhum Aborda as limitações existentes de feedback de concessão de memória de forma não intrusiva, incorporando a execução de consultas anteriores para refinar o feedback.
Persistência de feedback de concessão de memória, CE e DOP Sim, com compatibilidade do banco de dados de nível 160 ou superior Fornece uma nova funcionalidade para persistir o feedback de concessão de memória. O feedback de CE e DOP é sempre persistente. Requer que o Repositório de Consultas esteja habilitado e no modo READ_WRITE.
Forçar o plano otimizado Nenhum Reduz a sobrecarga de compilação para repetir consultas forçadas. Para obter mais informações, confira Imposição de plano otimizado com Repositório de Consultas.
Inlining de UDF escalar Sim, com compatibilidade do banco de dados de nível 150 ou superior Os UDFs escalares são transformados em expressões relacionais equivalentes que são "embutidas" na consulta que fez a chamada, geralmente resultando em ganhos significativos de desempenho.
Otimização do plano de sensibilidade de parâmetro Nenhum A Otimização do Plano de Sensibilidade de Parâmetro aborda o cenário em que um só plano armazenado em cache para uma consulta parametrizada não é ideal para todos os valores de parâmetro de entrada possíveis, por exemplo, para distribuições de dados não uniformes.
Compilação Adiada de Variável da Tabela Sim, com compatibilidade do banco de dados de nível 150 ou superior Usa a cardinalidade real da variável de tabela encontrada na primeira compilação em vez de uma estimativa fixa.

Recursos IQP para SQL Server 2019 (15.x)

Recurso IQP Com suporte no SQL Server 2019 (15.x) Descrição
Junções adaptáveis (Modo de Lote) Sim, no SQL Server 2017 (14.x ou versões posteriores) com compatibilidade do banco de dados de nível 140 As junções adaptáveis selecionam automaticamente um tipo de junção durante o runtime com base nas linhas de entrada reais.
Distinção de contagem aproximada Yes Forneça o COUNT DISTINCT aproximado para cenários de big data com o benefício de alto desempenho e baixo volume de memória.
Modo de Lote no Rowstore Sim, com compatibilidade do banco de dados de nível 150 ou superior Forneça o modo de lote para cargas de trabalho de DW relacionais vinculados à CPU sem exigir índices columnstore.
Execução intercalada Sim, com compatibilidade do banco de dados de nível 140 ou superior Use a cardinalidade real da função com valor de tabela de várias instruções encontrada na primeira compilação em vez de uma estimativa fixa.
Feedback de concessão de memória (Modo de Lote) Sim, com compatibilidade do banco de dados de nível 140 ou superior Se uma consulta de modo de lote tiver operações que são despejadas no disco, aumente a memória para execuções consecutivas. Se uma consulta gastar > 50% da memória alocada para ela, reduza o tamanho da concessão de memória para execuções consecutivas.
Feedback de concessão de memória (Modo de Linha) Sim, com compatibilidade do banco de dados de nível 150 ou superior Se uma consulta de modo de linha tiver operações que são despejadas no disco, aumente a memória para execuções consecutivas. Se uma consulta gastar > 50% da memória alocada para ela, reduza o tamanho da concessão de memória para execuções consecutivas.
Inlining de UDF escalar Sim, com compatibilidade do banco de dados de nível 150 ou superior Os UDFs escalares são transformados em expressões relacionais equivalentes que são "embutidas" na consulta que fez a chamada, geralmente resultando em ganhos significativos de desempenho.
Compilação Adiada de Variável da Tabela Sim, com compatibilidade do banco de dados de nível 150 ou superior Use a cardinalidade real da variável de tabela encontrada na primeira compilação em vez de uma estimativa fixa.

Recursos IQP para SQL Server 2017 (14.x)

Recurso IQP Com suporte no SQL Server 2017 (14.x) Descrição
Junções adaptáveis (Modo de Lote) Sim, no SQL Server 2017 (14.x ou versões posteriores) com compatibilidade do banco de dados de nível 140 As junções adaptáveis selecionam automaticamente um tipo de junção durante o runtime com base nas linhas de entrada reais.
Distinção de contagem aproximada Yes Forneça o COUNT DISTINCT aproximado para cenários de big data com o benefício de alto desempenho e baixo volume de memória.
Execução intercalada Sim, com compatibilidade do banco de dados de nível 140 ou superior Use a cardinalidade real da função com valor de tabela de várias instruções encontrada na primeira compilação em vez de uma estimativa fixa.
Feedback de concessão de memória (Modo de Lote) Sim, com compatibilidade do banco de dados de nível 140 ou superior Se uma consulta de modo de lote tiver operações que são despejadas no disco, aumente a memória para execuções consecutivas. Se uma consulta gastar > 50% da memória alocada para ela, reduza o tamanho da concessão de memória para execuções consecutivas.

Requisito do Repositório de Consultas

Várias opções do conjunto de recursos de processamento de consulta inteligente exigem que o Repositório de Consultas esteja habilitado para beneficiar o banco de dados de usuário. Para habilitar o Repositório de Consultas, confira Habilitar o Repositório de Consultas.

Recurso IQP Requer que o Repositório de Consultas esteja habilitado e no modo READ_WRITE
Junções adaptáveis (Modo de Lote) Não
Distinção de contagem aproximada Não
Percentil aproximado Não
Modo de Lote no Rowstore Não
Feedback da CE (estimativa de cardinalidade) Yes
Comentários sobre graus de paralelismo (DOP) Yes
Execução intercalada Não
Feedback de concessão de memória (Modo de Lote) Não
Feedback de concessão de memória (Modo de Linha) Não
Feedback de concessão de memória (modo de percentil e de persistência) Yes
Forçar o plano otimizado Yes
Inlining de UDF escalar Não
Otimização do plano de sensibilidade de parâmetro Não, mas é recomendado
Compilação Adiada de Variável da Tabela Não

Para obter detalhes completos sobre todos os recursos IQP, incluindo notas de versão e descrições mais detalhadas, veja Detalhes do recurso de processamento de consulta inteligente (IQP).