Compartilhar via


Práticas recomendadas para dicas do Repositório de Consultas

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.

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.
  • Quando uma consulta é bloqueada pela ABORT_QUERY_EXECUTION dica, as colunas execution_type e execution_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 dica ABORT_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.