Partilhar via


sp_query_store_force_plan (Transact-SQL)

Aplica-se a: SQL Server 2016 (13.x) e posterior Banco de Dados SQL do AzureInstância Gerenciada SQL do Azure

Permite forçar um plano específico para uma consulta específica no Repositório de Consultas.

Quando um plano é forçado para uma consulta específica, sempre que o SQL Server encontra a consulta, ele tenta forçar o plano no Otimizador de Consulta. Se o esforço de planejamento falhar, um Evento Estendido será acionado e o Otimizador de Consulta será instruído a otimizar da maneira normal.

Transact-SQL convenções de sintaxe

Sintaxe

sp_query_store_force_plan
    [ @query_id = ] query_id ,
    [ @plan_id = ] plan_id ,
    [ @disable_optimized_plan_forcing = ] disable_optimized_plan_forcing ,
    [ @force_plan_scope = ] 'replica_group_id'
[ ; ]

Argumentos

Importante

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

A ID da consulta. @query_id é bigint, sem padrão.

[ @plan_id = ] plan_id

A ID do plano de consulta a ser forçado. @plan_id é bigint, sem padrão.

[ @disable_optimized_plan_forcing = ] disable_optimized_plan_forcing

Indica se a imposição de plano otimizado deve ser desativada. @disable_optimized_plan_forcing é pouco com um padrão de 0.

[ @force_plan_scope = ] 'replica_group_id'

Você pode forçar planos em uma réplica secundária quando Repositório de Consultas para réplicas secundárias estiver habilitado. Execute sp_query_store_force_plan e sp_query_store_unforce_plan na réplica secundária. O argumento @force_plan_scope opcional assume como padrão apenas a réplica local (primária ou secundária), mas você pode, opcionalmente, especificar um replica_group_id fazendo referência sys.query_store_replicas.

Valores de código de retorno

0 (sucesso) ou 1 (fracasso).

Comentários

O plano de execução resultante forçado por este recurso é o mesmo ou semelhante ao plano que está sendo forçado. Como o plano resultante pode não ser idêntico ao plano especificado por sys.sp_query_store_force_plan, o desempenho dos planos pode variar. Em casos raros, a diferença de desempenho pode ser significativa e negativa; Nesse caso, o administrador deve remover o plano forçado.

Revise planos forçados em réplicas secundárias com sys.query_store_plan_forcing_locations.

Permissões

Requer a permissão ALTER no banco de dados.

Exemplos

O exemplo a seguir retorna informações sobre as consultas no Repositório de Consultas.

SELECT txt.query_text_id,
    txt.query_sql_text,
    pl.plan_id,
    qry.*
FROM sys.query_store_plan AS pl
INNER JOIN sys.query_store_query AS qry
    ON pl.query_id = qry.query_id
INNER JOIN sys.query_store_query_text AS txt
    ON qry.query_text_id = txt.query_text_id;

Depois de identificar os query_id e plan_id que deseja forçar, use o exemplo a seguir para forçar a consulta a usar um plano.

EXEC sp_query_store_force_plan
    @query_id = 3,
    @plan_id = 3;

Use sys.query_store_plan_forcing_locations, unido ao sys.query_store_replicas, para recuperar Repositório de Consultas para réplicas secundárias.

SELECT query_plan
FROM sys.query_store_plan AS qsp
INNER JOIN sys.query_store_plan_forcing_locations AS pfl
    ON pfl.query_id = qsp.query_id
INNER JOIN sys.query_store_replicas AS qsr
    ON qsr.replica_group_id = qsp.replica_group_id
WHERE qsr.replica_name = 'yourSecondaryReplicaName';