Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2022 (16.x) e versões
posteriores Azure SQL Database
AzureSQL Managed Instance
SQL database in Microsoft Fabric
Cria ou atualiza dicas do Repositório de Consultas para um determinado query_id.
Transact-SQL convenções de sintaxe
Syntax
sp_query_store_set_hints
[ @query_id = ] query_id ,
[ @query_hints = ] 'query_hints'
[ , [ @replica_group_id = ] 'replica_group_id' ]
[ ; ]
Arguments
Important
Os argumentos para procedimentos armazenados estendidos devem ser inseridos na ordem específica, conforme descrito na seção de sintaxe. Se os parâmetros forem inseridos fora de ordem, ocorrerá uma mensagem de erro.
@query_id [ = ] query_id
O Repositório de Consultas query_id coluna do sys.query_store_query.
@query_id é bigint.
@query_hints [ = ] N'query_hints'
Uma cadeia de caracteres de opções de consulta que começa com OPTION.
@query_hints é nvarchar(max).
Quando USE HINT é incluído no @query_hints argumento, as aspas simples em torno de nomes de dicas individuais devem ser repetidas. Por exemplo, @query_hints = N'OPTION (MAXDOP = 1, USE HINTS (''ENABLE_QUERY_OPTIMIZER_HOTFIXES'',''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_150''))'.
Para obter mais informações, consulte Dicas de consulta suportadas.
@replica_group_id [ = ] «replica_group_id»
Esse parâmetro opcional determina o escopo no qual a dica é aplicada em uma réplica secundária quando o Repositório de Consultas para secundários legíveis está habilitado . @replica_group_id é bigint. A Query Store para réplicas secundárias é suportada a partir do SQL Server 2025 (17.x) e versões posteriores, bem como na Azure SQL Database. Para suporte completo à plataforma, consulte Loja de Consulta para réplicas secundárias.
O argumento @replica_group_id assume como padrão a réplica local (primária ou secundária), mas você pode, opcionalmente, especificar um valor correspondente a replica_group_id um valor na coluna sys.query_store_replicas definir uma dica para um grupo de réplicas diferente.
Valor de retorno
0 (sucesso) ou 1 (fracasso).
Remarks
As dicas são especificadas em um formato de cadeia de caracteres T-SQL válido N'OPTION (..)'.
- Se não existirem dicas do Repositório de Consultas para um @query_idespecí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 valor especificado para @query_hints substituirá as dicas especificadas anteriormente para a consulta associada.
- Se um query_id não existir, um erro será gerado.
No caso em que uma das dicas impediria que um plano de consulta fosse produzido, todas as dicas seriam ignoradas. Para obter mais informações sobre detalhes de falha, consulte 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 suportadas
Estas dicas de consulta são suportadas 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 ] )
As seguintes dicas de consulta não são suportadas no momento:
OPTIMIZE FOR ( @var = val)MAXRECURSION-
USE PLAN(em vez disso, considere o recurso de forçar o plano original do Query Store, sp_query_store_force_plan). DISABLE_DEFERRED_COMPILATION_TVDISABLE_TSQL_SCALAR_UDF_INLINING-
Dicas de tabela (por exemplo,
FORCESEEK,READUNCOMMITTED,INDEX)
Permissions
Requer a permissão ALTER no banco de dados.
Examples
Identificar 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 em suas exibições do sistema.
Identifique a consulta nas exibições do catálogo do sistema Repositório de Consultas:
SELECT q.query_id,
qt.query_sql_text
FROM sys.query_store_query_text AS qt
INNER JOIN sys.query_store_query AS 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 banco de dados SalesLT 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:
EXECUTE 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 do estimador de cardinalidade herdado ao query_id 39, identificado no Repositório de Consultas:
EXECUTE 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 1e o comportamento do otimizador de consulta no nível de compatibilidade 110:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(RECOMPILE, MAXDOP 1, USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_110''))';
Exibir dicas do Repositório de Consultas
O exemplo a seguir retorna dicas existentes do Repositório de Consultas:
SELECT query_hint_id,
query_id,
replica_group_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.
EXECUTE sys.sp_query_store_clear_hints @query_id = 39;