Compartilhar via


sys.sp_query_store_set_hints (Transact-SQL)

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores Banco de dados SQL do AzureInstância Gerenciada de SQL do AzureBanco de dados SQL no Microsoft Fabric

Cria ou atualiza dicas do Repositório de Consultas para um determinado query_id.

Convenções de sintaxe de Transact-SQL

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 sintaxe. Se os parâmetros forem inseridos fora de ordem, ocorrerá uma mensagem de erro.

@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).

Quando USE HINT está incluído no argumento, as aspas únicas em @query_hints 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 com suporte.

@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 Loja de Consultas para réplicas secundárias é suportada a partir do SQL Server 2025 (17.x) e versões posteriores, além do Azure SQL Database. Para suporte completo à plataforma, veja Loja de Consultas para réplicas secundárias.

O argumento @replica_group_id usa como padrão a réplica local (primária ou secundária), mas opcionalmente você pode especificar um valor correspondente a replica_group_id um valor na coluna em sys.query_store_replicas para definir uma dica para um grupo de réplicas diferente.

Valor de retorno

0 (sucesso) ou 1 (falha).

Remarks

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

  • Se nenhuma dica do Repositório de Consultas existir 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 evitaria a produção de um plano de consulta, todas as dicas são ignoradas. Para obter mais informações sobre detalhes da 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 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

Permissions

Requer a permissão ALTER no banco de dados.

Examples

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 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 SalesLT banco de dados foi identificado como query_id 39.

Aplicar dica única

O exemplo a seguir aplica a RECOMPILE dica a 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 avaliador de cardinalidade herdado a 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 a 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 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,
       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;