Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2022 (16.x) e versões posteriores
do Banco de Dados SQL do AzureBanco de Dados SQL
do Azure Banco de Dados SQL banco de dados SQL do
Banco de Dados SQL do Azurebanco de dados SQL no Microsoft Fabric
Este artigo detalha as melhores práticas para usar Query Store hints. As dicas do Repositório de Consultas permitem desenvolver formas de plano de consulta sem modificar o código do aplicativo.
- Para obter mais informações configuração e administração com o Repositório de Consultas, confira Monitoramento do desempenho usando o Repositório de Consultas.
- Para obter informações sobre como descobrir informações acionáveis e ajustar o desempenho com o Repositório de Consultas, confira Ajustar o desempenho com o Repositório de Consultas.
- Para obter práticas recomendadas gerais no Repositório de Consultas, consulte as práticas recomendadas com o Repositório de Consultas.
Casos de uso de dicas do Repositório de Consultas
Considere os seguintes casos de uso como ideais para dicas do Repositório de Consultas. Para obter mais informações, confira Quando usar as dicas do Repositório de Consultas.
Cuidado
Como o otimizador de consulta do SQL Server seleciona, normalmente, o melhor plano de execução para uma consulta, recomendamos usar dicas apenas como último recurso para desenvolvedores e administradores de banco de dados experientes. Para saber mais, confira Dicas de consulta.
Quando o código não pode ser alterado
O uso das dicas do Repositório de Consultas permite influenciar os planos de execução de consultas sem alterar o código do aplicativo nem os objetos de banco de dados. Nenhum outro recurso permite que você aplique dicas de consulta com rapidez e facilidade.
Você pode usar dicas do Repositório de Consultas, por exemplo, para beneficiar o ETL sem reimplantar código. Saiba como aprimorar o carregamento em massa com as dicas do Repositório de Consultas assistindo a este vídeo de 14 minutos:
As dicas do Repositório de Consultas são métodos de ajuste de consulta leve, mas quando a consulta fica problemática, é necessário aplicar alterações de código mais significativas. Se você tem uma necessidade regular de aplicar dicas do Repositório de Consultas a uma consulta, considere reescrever uma consulta maior. O Otimizador de Consulta do SQL Server normalmente seleciona o melhor plano de execução para uma consulta. Recomendamos usar apenas dicas como último recurso para desenvolvedores experientes e administradores de banco de dados.
Para obter informações sobre quais dicas de consulta podem ser aplicadas, confira Dicas de consulta com suporte.
Sob carga elevada de transações ou com código de missão crítica
Se as alterações de código forem impraticáveis devido a requisitos elevados de tempo de atividade ou carga transacional, as dicas do Repositório de Consultas poderão aplicar dicas de consulta a cargas de trabalho de consulta existentes rapidamente. É fácil adicionar e remover sugestões do Query Store.
As dicas do Repositório de Consultas podem ser adicionadas e removidas em lotes de consultas para ajustar o desempenho em janelas cronometradas para intermitências de carga de trabalho excepcional.
Como uma substituição dos guias de plano
Antes das dicas do Repositório de Consultas, um desenvolvedor teria que contar com guias de plano para realizar tarefas semelhantes, que podem ser complexas de usar. As dicas do Repositório de Consultas são integradas aos recursos do Repositório de Consultas do SSMS (SQL Server Management Studio) para exploração visual de consultas.
Com as guias de plano, será necessário pesquisar em todos os planos usando trechos de consulta. O recurso de dicas do Query Store não requer correspondência exata das consultas para afetar o plano de consulta resultante. As dicas do Repositório de Consultas podem ser aplicadas a uma query_id
no conjunto de dados do Repositório de Consultas.
As dicas do Repositório de Consultas substituem as dicas de nível de instrução embutidas em código e guias de plano existentes.
Considerar um nível de compatibilidade mais recente
Dicas do Query Store podem ser um método valioso quando um nível mais recente de compatibilidade de banco de dados não está disponível para você devido à especificação do vendedor ou a longos atrasos nos testes, por exemplo. Quando um nível de compatibilidade maior estiver disponível para um banco de dados, considere atualizar o nível de compatibilidade do banco de dados de uma consulta específica para usufruir das otimizações de desempenho e dos recursos mais recentes do SQL Server.
Por exemplo, se você tiver uma instância do SQL Server 2022 (16.x) com um banco de dados no nível de compatibilidade 140, ainda poderá usar dicas do Repositório de Consultas para executar consultas individuais no nível de compatibilidade 160. Você poderia usar a seguinte dica:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_160''))';
Para obter um tutorial completo, consulte Exemplos de sugestões do Repositório de Consultas.
Considerar um nível de compatibilidade mais antigo após a atualização
Outro caso em que as dicas do Repositório de Consultas podem ajudar é quando as consultas não podem ser modificadas diretamente após uma migração ou atualização de instância do SQL Server. Use as dicas do Repositório de Consultas para aplicar um nível de compatibilidade anterior a uma consulta até que ela possa ser reescrita ou endereçada de outra forma para ter um bom desempenho no nível de compatibilidade mais recente. Identifique consultas de exceção que regrediram com um nível de compatibilidade mais alto usando o relatório de consultas regredidas do Repositório de Consultas, usando a ferramenta Assistente de Otimização de Consulta durante uma migração ou outra telemetria de aplicativo no nível da consulta. Para obter mais informações sobre as diferenças entre os níveis de compatibilidade, revise as Diferenças entre níveis de compatibilidade.
Depois de testar o desempenho do novo nível de compatibilidade e implantar as dicas do Repositório de Consultas dessa maneira, você pode atualizar todo o nível de compatibilidade do banco de dados, mantendo as principais consultas problemáticas no nível de compatibilidade anterior, sem alterações de código.
Bloquear a execução futura de consultas problemáticas
Você pode usar a ABORT_QUERY_EXECUTION
dica de consulta para bloquear a execução futura de consultas problemáticas conhecidas, por exemplo, consultas não essenciais que causam alto consumo de recursos e afetam cargas de trabalho críticas do aplicativo.
Observação
Neste momento, a dica de consulta ABORT_QUERY_EXECUTION (versão prévia) está disponível apenas no Banco de Dados SQL do Azure e na versão prévia do SQL Server 2025 (17.x).
Por exemplo, para bloquear a execução futura de query_id
39, execute a seguinte instrução:
EXEC sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION (USE HINT (''ABORT_QUERY_EXECUTION''))';
Para obter mais informações, confira os exemplos de dicas do Repositório de Consultas.
As seguintes considerações se aplicam:
- Quando você especifica essa indicação para uma consulta, uma tentativa de executar a consulta falha com o erro 8778, gravidade 16, a execução da consulta foi interrompida porque a indicação ABORT_QUERY_EXECUTION foi especificada.
- Para desbloquear uma consulta, você pode limpar a dica passando o valor
query_id
para o parâmetro@query_id
no procedimento armazenado sys.sp_query_store_clear_hints. - Você pode usar exibições do sistema para localizar consultas no Query Store que estão bloqueadas, como na seguinte consulta de exemplo:
SELECT qsh.query_id, q.query_hash, qt.query_sql_text FROM sys.query_store_query_hints AS qsh INNER JOIN sys.query_store_query AS q ON qsh.query_id = q.query_id INNER JOIN sys.query_store_query_text AS qt ON q.query_text_id = qt.query_text_id WHERE UPPER(qsh.query_hint_text) LIKE '%ABORT[_]QUERY[_]EXECUTION%'
- Para obter o
query_id
valor, pelo menos uma execução de consulta deve ser registrada no Repositório de Consultas. Essa execução não precisa ser bem-sucedida. Isso significa que a execução futura de consultas com tempo limite ou canceladas pode ser bloqueada. - Se uma consulta já estiver em execução quando você bloqueá-la, sua execução continuará. Você pode usar a instrução KILL para anular a consulta.
- A execução de consultas mortas não é registrada no Repositório de Consultas. Se a consulta ainda não estiver no Repositório de Consultas, você precisará permitir que a consulta seja concluída ou atinja o tempo limite para obter um
query_id
que você possa bloquear.
- A execução de consultas mortas não é registrada no Repositório de Consultas. Se a consulta ainda não estiver no Repositório de Consultas, você precisará permitir que a consulta seja concluída ou atinja o tempo limite para obter um
- Quando uma consulta é bloqueada pela
ABORT_QUERY_EXECUTION
dica, as colunasexecution_type
eexecution_type_desc
na exibição sys.query_store_runtime_stats são configuradas como 4 e Exceção, respectivamente. - Assim como acontece com todas as dicas do Repositório de Consultas, você precisa ter a permissão
ALTER
no banco de dados para definir e limpar a dicaABORT_QUERY_EXECUTION
.
Considerações sobre dicas do Repositório de Consultas
Considere os seguintes cenários ao implantar as dicas do Repositório de Consultas.
Alterações na distribuição de dados
Guias de plano, planos forçados por meio do Repositório de Consultas e dicas do Repositório de Consultas substituem a tomada de decisão do otimizador. A dica do Repositório de Consultas pode ajudar agora, mas não depois. Por exemplo, se uma dica do Repositório de Consultas ajudar uma consulta na distribuição de dados anterior, ela poderá ser contraproducente se operações DML em grande escala alterarem os dados. Uma nova distribuição de dados poderá fazer com que o otimizador tome uma decisão melhor do que a dica. Esse cenário é a consequência mais comum do comportamento de plano forçado.
Reavaliar sempre a estratégia de dicas do Repositório de Consultas
Reavalie sua estratégia de dicas do Repositório de Consultas nos seguintes casos:
- Após grandes alterações de distribuição de dados conhecidas.
- Quando os recursos disponíveis para o banco de dados forem alterados. Por exemplo, quando o tamanho da computação do Banco de Dados SQL do Azure, da Instância Gerenciada de SQL ou da máquina virtual do SQL Server é alterado.
- Onde a correção de planos se tornou de longa duração. As sugestões do Query Store são mais usadas para correções temporárias.
- Regressões de desempenho inesperadas.
Amplo potencial de impacto
As dicas do Repositório de Consultas afetam todas as execuções da consulta, independentemente do conjunto de parâmetros, aplicativo de origem, usuário ou conjunto de resultados. No caso de regressão de desempenho acidental, as dicas do Repositório de Consultas criadas com sys.sp_query_store_set_hints podem ser facilmente removidas com sys.sp_query_store_clear_hints.
Carregue com cuidado as alterações de teste para sistemas críticos ou confidenciais antes de aplicar as dicas do Repositório de Consultas em produção.
Não há suporte para a parametrização forçada e a dica RECOMPILE
Não há suporte para a aplicação da dica de consulta RECOMPILE
com dicas do Repositório de Consultas quando a opção de banco de dados PARAMETERIZATION é definida como FORCED. Para saber mais, veja Diretrizes para uso da parametrização forçada.
A dica RECOMPILE
não é compatível com a parametrização forçada definida no nível do banco de dados. Se o banco de dados usar a parametrização forçada e a RECOMPILE
dica fizer parte do conjunto de dicas no Query Store para uma consulta, o Mecanismo de Banco de Dados ignorará a RECOMPILE
dica e aplicará outras dicas, se especificado. Além disso, a partir de julho de 2022 no Banco de Dados SQL do Azure, um aviso (código de erro 12461) é emitido informando que a RECOMPILE
dica foi ignorada.
Para obter informações sobre quais dicas de consulta podem ser aplicadas, confira Dicas de consulta com suporte.