Partilhar via


sp_query_store_set_hints (Transact-SQL)

Aplica-se a: SQL Server 2022 (16.x) Banco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Cria ou atualiza dicas 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 de Consultas query_id de sys.query_store_query. @query_id é bigint.

[ @query_hints = ] N'query_hints'

Uma cadeia de caracteres de opções de consulta começando 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 de Repositório de Consultas é apenas o réplica local. @query_hint_scope é tinyint. Esse parâmetro opcional determina o escopo no qual a dica será aplicada em um réplica secundário quando Repositório de Consultas para réplicas secundárias estiver habilitada. O argumento opcional query_hint_scope usa como padrão apenas o réplica local (primário ou secundário), mas opcionalmente você pode especificar um replica_group_id referenciando sys.query_store_replicas.

Valores retornados

0 (êxito) ou 1 (falha).

Comentários

As dicas são especificadas em um formato de cadeia de caracteres T-SQL válido N'OPTION (..)'.

  • Se nenhuma dica de Repositório de Consultas existir para um query_id específico, uma nova dica de Repositório de Consultas será criada.
  • Se já existir uma dica de 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:

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;

Repositório de Consultas não reflete imediatamente os dados de consulta nas 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 a query_id 39, conforme identificado em 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 em 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 a query_id 39, incluindo RECOMPILE, MAXDOP 1 e o comportamento do otimizador de consulta 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 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 (Transact-SQL ).

EXEC sys.sp_query_store_clear_hints @query_id = 39;

Próximas etapas