sys.sp_query_store_set_hints (Transact-SQL)
Aplica-se a: SQL Server 2022 (16.x) Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Cria ou atualiza dicas do Repositório de Consultas para um determinado query_id.
Convenções de sintaxe de Transact-SQL
Sintaxe
sp_query_store_set_hints
[ @query_id = ] query_id ,
[ @query_hints = ] 'query_hints'
[ , [ @query_hint_scope = ] 'replica_group_id' ]
[ ; ]
Argumentos
@query_id [ = ] query_id
A coluna Repositório query_id
de Consultas do sys.query_store_query. @query_id é bigint.
@query_hints [ = ] N'query_hints'
Uma sequência de caracteres de opções de consulta que começa com OPTION
. @query_hints é nvarchar(max). Para obter mais informações, consulte Dicas de consulta com suporte neste artigo.
@query_hint_scope [ = ] 'replica_group_id'
Por padrão, o escopo de uma nova dica do Repositório de Consultas é apenas a réplica local. @query_hint_scope é minúsculo. Esse parâmetro opcional determina o escopo no qual a dica será aplicada em uma réplica secundária quando o Repositório de Consultas para réplicas secundárias estiver habilitado. O argumento query_hint_scope opcional é padronizado apenas para a réplica local (primária ou secundária), mas você pode, opcionalmente, especificar um replica_group_id referenciando sys.query_store_replicas.
Valor retornado
0
(sucesso) ou 1
(falha).
Comentários
As dicas são especificadas em um formato de cadeia de caracteres T-SQL válido N'OPTION (..)'
.
- Se não houver nenhuma dica do Repositório de Consultas para um query_id específico, uma nova dica do Repositório de Consultas será criada.
- Se já existir uma dica do Repositório de Consultas para um query_id específico, o último valor fornecido substituirá os valores especificados anteriormente para a consulta associada.
- Se um query_id não existir, um erro será gerado.
Nos casos em que uma dica faria uma consulta falhar, a dica é ignorada e os detalhes mais recentes da falha podem ser vistos em sys.query_store_query_hints.
Para remover dicas associadas a um query_id, use o procedimento armazenado do sistema sys.sp_query_store_clear_hints.
Dicas de consulta com suporte
Essas dicas de consulta têm suporte como dicas do Repositório de Consultas:
{ HASH | ORDER } GROUP
| { CONCAT | HASH | MERGE } UNION
| { LOOP | MERGE | HASH } JOIN
| EXPAND VIEWS
| FAST number_rows
| FORCE ORDER
| IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
| KEEP PLAN
| KEEPFIXED PLAN
| MAX_GRANT_PERCENT = percent
| MIN_GRANT_PERCENT = percent
| MAXDOP number_of_processors
| NO_PERFORMANCE_SPOOL
| OPTIMIZE FOR UNKNOWN
| PARAMETERIZATION { SIMPLE | FORCED }
| RECOMPILE
| ROBUST PLAN
| USE HINT ( '<hint_name>' [ , ...n ] )
Atualmente, não há suporte para as seguintes dicas de consulta:
OPTIMIZE FOR ( @var = val)
MAXRECURSION
USE PLAN
(em vez disso, considere a funcionalidade de imposição de plano original do Repositório de Consultas, sp_query_store_force_plan).DISABLE_DEFERRED_COMPILATION_TV
DISABLE_TSQL_SCALAR_UDF_INLINING
- Dicas de tabela (por exemplo, FORCESEEK, READUNCOMMITTED, INDEX)
Permissões
Requer a permissão ALTER no banco de dados.
Exemplos
Identifique uma consulta no Repositório de Consultas
O exemplo a seguir consulta sys.query_store_query_text e sys.query_store_query para retornar o query_id de um fragmento de texto de consulta executado.
Neste exemplo, a consulta que estamos tentando ajustar está no banco de dados de exemplo SalesLT
:
SELECT * FROM SalesLT.Address as A
INNER JOIN SalesLT.CustomerAddress as CA
on A.AddressID = CA.AddressID
WHERE PostalCode = '98052' ORDER BY A.ModifiedDate DESC;
O Repositório de Consultas não reflete imediatamente os dados de consulta para suas exibições do sistema.
Identifique a consulta nas exibições do catálogo do sistema do repositório de consultas:
SELECT q.query_id, qt.query_sql_text
FROM sys.query_store_query_text qt
INNER JOIN sys.query_store_query q ON
qt.query_text_id = q.query_text_id
WHERE query_sql_text like N'%PostalCode =%'
AND query_sql_text not like N'%query_store%';
GO
Nos exemplos a seguir, o exemplo de consulta anterior no SalesLT
banco de dados foi identificado como query_id 39.
Aplicar dica única
O exemplo a seguir aplica a dica RECOMPILE ao query_id 39, conforme identificado no Repositório de Consultas:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(RECOMPILE)';
O exemplo a seguir aplica a dica para forçar o avaliador de cardinalidade herdado a query_id 39, identificado no Repositório de Consultas:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';
Aplicar várias dicas
O exemplo a seguir aplica várias dicas de consulta ao query_id 39, incluindo RECOMPILE, MAXDOP 1 e o comportamento do otimizador de consulta do SQL 2012:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(RECOMPILE, MAXDOP 1, USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_110''))';
Exibir as dicas do Repositório de consultas
O seguinte exemplo retorna as dicas existentes do Repositório de Consultas:
SELECT query_hint_id, query_id, query_hint_text, last_query_hint_failure_reason, last_query_hint_failure_reason_desc, query_hint_failure_count, source, source_desc
FROM sys.query_store_query_hints
WHERE query_id = 39;
Remover a dica de uma consulta
Use o exemplo a seguir para remover a dica do query_id 39, usando o procedimento armazenado do sistema sp_query_store_clear_hints .
EXEC sys.sp_query_store_clear_hints @query_id = 39;