Partilhar via


Práticas recomendadas de sugestões do Repositório de Consultas

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores Azure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Este artigo detalha as práticas recomendadas para usar sugestões do Repositório de Consultas. As dicas do Repositório de Consultas permitem moldar formas de plano de consulta sem modificar o código do aplicativo.

Casos de uso para sugestões do Repositório de Consultas

Considere os seguintes casos de uso como ideais para as sugestões do Query Store. Para obter mais informações, consulte Quando utilizar as dicas do Repositório de Consultas.

Caution

Como o Otimizador de Consultas do SQL Server normalmente seleciona o melhor plano de execução para uma consulta, recomendamos usar apenas dicas como último recurso para desenvolvedores e administradores de banco de dados experientes. Para obter mais informações, consulte Dicas de consulta.

Quando o código não pode ser alterado

O uso de dicas do Repositório de Consultas permite que você influencie os planos de execução de consultas sem alterar o código do aplicativo ou os objetos do banco de dados. Nenhum outro recurso permite que você aplique dicas de consulta de forma rápida e fácil.

Você pode usar dicas do Repositório de Consultas para otimizar processos de extração, transformação e carregamento (ETL), sem a necessidade de reimplantar o código. Saiba como melhorar o carregamento em massa com as dicas do Query Store com este vídeo de 14 minutos:

As dicas do Repositório de Consultas são métodos leves de ajuste de consulta, mas se uma consulta se tornar problemática, ela deve ser resolvida com alterações de código mais substanciais. Se estiveres regularmente a sentir a necessidade de aplicar dicas do Query Store a uma consulta, considera uma reescrita de consulta mais abrangente. 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 e administradores de banco de dados experientes.

Para obter informações sobre quais dicas de consulta podem ser aplicadas, consulte Dicas de consulta suportadas.

Sob alta carga de transação ou com código crítico para a missão

Se as alterações de código forem impraticáveis devido à elevada exigência de disponibilidade ou carga transacional, as sugestões do Query Store podem ser aplicadas rapidamente a cargas de trabalho de consulta existentes. Adicionar e remover dicas do Repositório de Consultas é fácil.

As sugestões do Repositório de Consultas podem ser adicionadas e removidas a lotes de consultas para ajustar o desempenho durante períodos cronometrados de picos excecionais de carga de trabalho.

Em substituição aos guias de planos

Antes das sugestões do Repositório de Consultas, um desenvolvedor teria que confiar em guias de plano para realizar tarefas semelhantes, que podem ser difíceis de usar. As dicas do Repositório de Consultas são integradas aos recursos do Repositório de Consultas do SQL Server Management Studio (SSMS), para exploração visual de consultas.

Com guias de planos, é necessário pesquisar todos os planos usando trechos de consulta. O recurso de sugestões do Query Store não requer consultas que correspondam exatamente para impactar o plano de execução resultante. As dicas do Repositório de Consultas podem ser aplicadas a um query_id no conjunto de dados do Repositório de Consultas.

As dicas do Repositório de Consultas substituem as dicas codificadas a nível de instrução e os guias de plano existentes.

Considere um nível de compatibilidade mais recente

Os indicadores do Repositório de Consultas podem ser um método valioso quando um nível de compatibilidade de base de dados mais recente não está disponível devido às restrições do fornecedor ou a atrasos significativos nos testes, por exemplo. Quando um nível de compatibilidade mais alto estiver disponível para um banco de dados, considere atualizar o nível de compatibilidade do banco de dados de uma consulta individual para aproveitar as otimizações de desempenho e os 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ê pode usar a seguinte dica:

EXECUTE 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 dicas do Query Store.

Considere 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 atípicas que regrediram com um nível de compatibilidade mais alto usando o relatório de consultas regressadas do Repositório de Consultas, usando a ferramenta Assistente de Ajuste de Consulta durante uma migração ou outra telemetria de aplicativo no nível de consulta. Para obter mais informações sobre as diferenças entre os níveis de compatibilidade, consulte o Diferenças entre os 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 no código.

Bloquear a execução futura de consultas problemáticas

Você pode usar a dica de consulta para bloquear a ABORT_QUERY_EXECUTION 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 de aplicativos.

Note

A dica de consulta ABORT_QUERY_EXECUTION está disponível apenas no Azure SQL Database, Azure SQL Managed InstanceAUTD e SQL Server 2025 (17.x).

Por exemplo, para bloquear a execução futura de query_id 39, execute sys.sp_query_store_set_hints da seguinte maneira:

EXECUTE sys.sp_query_store_set_hints
    @query_id = 39,
    @query_hints = N'OPTION (USE HINT (''ABORT_QUERY_EXECUTION''))';

Para desbloquear a mesma consulta, execute sys.sp_query_store_clear_hints:

EXECUTE sys.sp_query_store_clear_hints @query_id = 39;

Para obter mais informações, consulte os exemplos de dicas do Query Store Consultas.

As seguintes considerações são aplicáveis:

  • Quando você especifica essa dica para uma consulta, uma tentativa de executar a consulta falha com o erro 8778, gravidade 16, a execução da consulta foi abortada porque a dica ABORT_QUERY_EXECUTION foi especificada.

  • Para desbloquear uma consulta, você pode limpar a dica passando o query_id valor para o @query_id parâmetro no procedimento armazenado sys.sp_query_store_clear_hints .

    • Este procedimento armazenado remove todas as sugestões para uma consulta. Se você quiser manter as dicas existentes enquanto desbloqueia a consulta, use sys.sp_query_store_set_hints, removendo a ABORT_QUERY_EXECUTION dica, mas mantendo outras dicas.
  • Você pode usar exibições do sistema para localizar consultas no Repositório de Consultas que estão bloqueadas, como na consulta de exemplo a seguir:

    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 valor de query_id, pelo menos uma execução de consulta deve ser registada no repositório de consultas. Essa execução não precisa ser bem-sucedida. Isso significa que a execução futura de consultas expiradas ou canceladas pode ser bloqueada.

  • Se você precisar bloquear ou desbloquear todas as consultas com um hash de consulta específico, considere usar um script de automação. Por exemplo, dbo.sp_query_store_modify_hints_by_query_hash é um procedimento armazenado de exemplo que chama o procedimento armazenado de sistema sys.sp_query_store_set_hints ou sys.sp_query_store_clear_hints em loop para todos os valores query_id que correspondem a um hash de consulta.

  • 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 interrompidas não fica registada no Repositório de Consultas. Se a consulta ainda não estiver no Repositório de Consultas, terá de deixá-la concluir ou expirar para conseguir um query_id que possa bloquear.
  • Quando uma consulta é bloqueada pela ABORT_QUERY_EXECUTION dica, as colunas execution_type e execution_type_desc na vista sys.query_store_runtime_stats são definidas como 4 e Exceção, respetivamente.

  • Como acontece com todas as dicas do Repositório de Consultas, você precisa ter a ALTER permissão no banco de dados para definir e limpar a ABORT_QUERY_EXECUTION dica.

Considerações sobre dicas do Query Store

Considere os cenários a seguir ao implantar dicas do Query Store.

Alterações na distribuição de dados

Guias de plano, planos forçados via o Repositório de Consultas e dicas do Repositório de Consultas prevalecem sobre as decisões do otimizador. A dica do Repositório de Consultas pode ser benéfica agora, mas não no futuro. 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 pode fazer com que o otimizador tome uma decisão melhor do que a dica. Este cenário é a consequência mais comum de forçar um comportamento planeado.

Reavalie regularmente a sua estratégia de dicas do Query Store

Reavalie sua estratégia de dicas do Repositório de Consultas existente nos seguintes casos:

  • Após grandes alterações conhecidas na distribuição de dados.
  • Quando os recursos disponíveis para o banco de dados são alterados. Por exemplo, quando o tamanho de computação do Banco de Dados SQL do Azure, da Instância Gerenciada do SQL ou da máquina virtual do SQL Server é alterado.
  • Onde a correção de planos se tornou duradoura. As sugestões do Repositório de Consultas são mais indicadas para correções de curto prazo.
  • 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, do aplicativo de origem, do usuário ou do conjunto de resultados. No caso de regressão acidental de desempenho, as dicas do Query Store criadas com sys.sp_query_store_set_hints podem ser facilmente removidas com sys.sp_query_store_clear_hints.

Teste cuidadosamente as alterações de carga para sistemas de missão crítica ou sensíveis antes de aplicar as dicas do Query Store em ambiente de produção.

Parametrização forçada e a dica RECOMPILE não são suportadas

A aplicação da dica de RECOMPILE consulta com dicas do Repositório de Consultas não é suportada quando a opção de banco de dados PARAMETRIZAÇÃO está definida como FORÇADO. Para obter mais informações, consulte Diretrizes para o uso de parametrização forçada.

A RECOMPILE sugestão não é compatível com a parametrização obrigatória definida ao nível do banco de dados. Se o banco de dados usar parametrização forçada e a dica RECOMPILE fizer parte da cadeia de caracteres de dicas definida no Repositório de Consultas para uma consulta, o Mecanismo de Banco de Dados ignorará a dica RECOMPILE 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 dica RECOMPILE foi ignorada.

Para obter informações sobre quais dicas de consulta podem ser aplicadas, consulte Dicas de consulta suportadas.