Processamento inteligente de consultas em bancos de dados SQL
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Banco de Dados SQL no Microsoft Fabric
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.
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 | Sim | 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) | 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 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, em versão prévia, a partir nível de compatibilidade de banco de dados 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 | Sim, com compatibilidade do banco de dados de nível 160 ou superior | 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 | Sim, em versão prévia, a partir nível de compatibilidade de banco de dados 160 ou superior | 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 | Sim | 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 | Sim, com compatibilidade do banco de dados de nível 160 ou superior | 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. |
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 | Sim | 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) | Sim, com compatibilidade do banco de dados de nível 160 ou superior | 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 | Sim, com compatibilidade do banco de dados de nível 160 ou superior | 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 | Sim | 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 | Sim | 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) | Sim |
Comentários sobre graus de paralelismo (DOP) | Sim |
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) | Sim |
Forçar o plano otimizado | Sim |
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 |
Conteúdo relacionado
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).
- Junções (SQL Server)
- Modos de execução
- Guia de arquitetura de processamento de consultas
- Referência de operadores físicos e lógicos de plano de execução
- Novidades no SQL Server 2017
- Novidades do SQL Server 2019
- Novidades do SQL Server 2022
- Feedback de concessão de memória
- Demonstrar o processamento de consulta inteligente
- Dobragem de constantes e avaliação de expressões
- Demonstrações de processamento de consulta inteligente no GitHub
- Central de desempenho do Mecanismo de Banco de Dados do SQL Server e do Banco de Dados SQL do Azure
- Monitorar o desempenho usando o Repositório de Consultas
- Melhores práticas para monitorar cargas de trabalho com o Repositório de Consultas