Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: SQL Server 2022 (16.x) e versões posteriores
Azure SQL Database
Azure SQL Managed Instance
Base 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.
- Para obter mais informações sobre como configurar e administrar com o Repositório de Consultas, consulte Monitorar o 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, consulte Ajustar o desempenho com o Repositório de Consultas.
- Para obter práticas recomendadas gerais no Repositório de Consultas, consulte Práticas recomendadas para monitorar cargas de trabalho com o Repositório de Consultas.
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_idvalor para o@query_idparâ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_EXECUTIONdica, mas mantendo outras dicas.
- 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
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_hintsousys.sp_query_store_clear_hintsem loop para todos os valoresquery_idque 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_idque possa bloquear.
- 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
Quando uma consulta é bloqueada pela
ABORT_QUERY_EXECUTIONdica, as colunasexecution_typeeexecution_type_descna 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
ALTERpermissão no banco de dados para definir e limpar aABORT_QUERY_EXECUTIONdica.
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.