Partilhar via


sys.query_store_plan (Transact-SQL)

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL database in Microsoft Fabric

Contém informações sobre cada plano de execução associado a uma consulta.

Nome da coluna Tipo de dados Description
plan_id bigint Chave primária.
query_id bigint Chave estrangeira. Junta-se a sys.query_store_query (Transact-SQL).
plan_group_id bigint ID do grupo do plano. As consultas de cursor normalmente exigem vários planos (preencher e buscar). Os planos de preenchimento e busca compilados juntos estão no mesmo grupo.

0 significa que o plano não está em grupo.
engine_version nvarchar(32) Versão do motor utilizado para compilar o plano em <major>.<minor>.<build>.<revision> formato.
compatibility_level smallint Nível de compatibilidade do banco de dados referenciado na consulta.
query_plan_hash binário(8) Hash MD5 do plano individual.
query_plan nvarchar (máx.) XML do plano de apresentação para o plano de consulta.
is_online_index_plan bit O plano foi usado durante uma compilação de índice online.

Observação: O Azure Synapse Analytics sempre retorna 0.
is_trivial_plan bit Plan é um plano trivial (saída no estágio 0 do otimizador de consulta).

Observação: O Azure Synapse Analytics sempre retorna 0.
is_parallel_plan bit O plano é paralelo.

Observação: O Azure Synapse Analytics sempre retorna 1.
is_forced_plan bit Plan é marcado como forçado quando o usuário executa o procedimento sys.sp_query_store_force_planarmazenado . O mecanismo de imposição não garante que esse plano exato será usado para a consulta referenciada pelo query_id. Forçar o plano faz com que a consulta seja compilada novamente e normalmente produz exatamente o mesmo plano ou um plano semelhante ao plano referenciado pelo plan_id. Se o esforço de plano não for bem-sucedido, force_failure_count será incrementado e last_force_failure_reason preenchido com o motivo da falha.

Observação: O Azure Synapse Analytics sempre retorna 0.
is_natively_compiled bit O plano inclui procedimentos otimizados de memória compilados nativamente. (0 = FALSE, 1 = TRUE).

Observação: O Azure Synapse Analytics sempre retorna 0.
force_failure_count bigint Número de vezes que forçar este plano falhou. Ele pode ser incrementado somente quando a consulta é recompilada (não em todas as execuções). Redefine para 0 cada vez is_forced_plan que é alterado de FALSE para TRUE.

Observação: O Azure Synapse Analytics sempre retorna 0.
last_force_failure_reason int Razão pela qual a execução do plano falhou.

0: nenhuma falha, caso contrário, número do erro que causou a falha forçada
3617: COMPILATION_ABORTED_BY_CLIENT
8637: ONLINE_INDEX_BUILD
8675: OPTIMIZATION_REPLAY_FAILED
8683: INVALID_STARJOIN
8684: TIME_OUT
8689: NO_DB
8690: HINT_CONFLICT
8691: SETOPT_CONFLICT
8694: DQ_NO_FORCING_SUPPORTED
8698: NO_PLAN
8712: NO_INDEX
8713: VIEW_COMPILE_FAILED
<Outro valor>: GENERAL_FAILURE

Observação: O Azure Synapse Analytics sempre retorna 0.
last_force_failure_reason_desc nvarchar(128) Descrição textual de last_force_failure_reason.

COMPILATION_ABORTED_BY_CLIENT: compilação de consulta abortada pelo cliente antes de ser concluída
ONLINE_INDEX_BUILD: consulta tenta modificar dados enquanto a tabela de destino tem um índice que está sendo criado online
OPTIMIZATION_REPLAY_FAILED: O script de repetição de otimização falhou ao ser executado.
INVALID_STARJOIN: plano contém especificação StarJoin inválida
TIME_OUT: O otimizador excedeu o número de operações permitidas ao procurar o plano especificado pelo plano forçado
NO_DB: Um banco de dados especificado no plano não existe
HINT_CONFLICT: A consulta não pode ser compilada porque o plano entra em conflito com uma dica de consulta
DQ_NO_FORCING_SUPPORTED: Não é possível executar a consulta porque o plano entra em conflito com o uso de consultas distribuídas ou operações de texto completo.
NO_PLAN: O processador de consultas não pôde produzir um plano de consulta, porque o plano forçado não pôde ser verificado como válido para a consulta
NO_INDEX: O índice especificado no plano não existe mais
VIEW_COMPILE_FAILED: Não foi possível forçar o plano de consulta devido a um problema em um modo de exibição indexado referenciado no plano
GENERAL_FAILURE: erro de força geral (não coberto por outros motivos)

Observação: O Azure Synapse Analytics sempre retorna NONE.
count_compiles bigint Planeie estatísticas de compilação.
initial_compile_start_time datetimeoffset Planeie estatísticas de compilação.
last_compile_start_time datetimeoffset Planeie estatísticas de compilação.
last_execution_time datetimeoffset O último tempo de execução refere-se à última hora de término da consulta/plano.
avg_compile_duration float Planeie estatísticas de compilação, em microssegundos. Divida por 1.000.000 para obter segundos.
last_compile_duration bigint Planeie estatísticas de compilação, em microssegundos. Divida por 1.000.000 para obter segundos.
plan_forcing_type int Aplica-se a: SQL Server 2017 (14.x) e versões posteriores

Planejar o tipo de força.

0: NONE
1: MANUAL
2: AUTO
plan_forcing_type_desc nvarchar(60) Aplica-se a: SQL Server 2017 (14.x) e versões posteriores

Descrição do texto de plan_forcing_type.

NONE: Sem forçar o plano
MANUAL: Plano forçado pelo usuário
AUTO: Plano forçado pelo ajuste automático.
has_compile_replay_script bit Aplica-se a: SQL Server 2022 (16.x) e versões posteriores

Indica se o plano tem um script de repetição de otimização associado a ele:
0 = Nenhum script de repetição de otimização (nenhum ou mesmo inválido).
1 = script de repetição de otimização gravado.

Não aplicável ao Azure Synapse Analytics.
is_optimized_plan_forcing_disabled bit Aplica-se a: SQL Server 2022 (16.x) e versões posteriores

Indica se a imposição do plano otimizado foi desabilitada para o plano:
0 = desativado.
1 = não desativado.

Não aplicável ao Azure Synapse Analytics.
plan_type int Aplica-se a: SQL Server 2022 (16.x) e versões posteriores

Tipo de plano.
0: Plano compilado
1: Plano do Despachante
2: Plano de variante de consulta

Não aplicável ao Azure Synapse Analytics.
plan_type_desc Nvarchar(120) Aplica-se a: SQL Server 2022 (16.x) e versões posteriores

Descrição em texto do tipo de plano.
Plano compilado: indica que o plano é um plano otimizado não sensível a parâmetros
Plano de despachante: indica que o plano é um plano de despachante otimizado de plano sensível a parâmetros
Plano de Variante de Consulta: indica que o plano é um plano de variante de consulta otimizado com diferenciação de parâmetros

Não aplicável ao Azure Synapse Analytics.

Observações

Mais de um plano pode ser forçado quando o Repositório de Consultas para réplicas secundárias está habilitado.

No Azure Synapse Analytics, usar as colunas has_compile_replay_script, is_optimized_plan_forcing_disabled, plan_type, plan_type_desc resulta em um Invalid Column Name erro, pois elas não são suportadas. Consulte o Exemplo B para obter um exemplo de como usar sys.query_store_plan no Azure Synapse Analytics.

Planejar limitações forçadas

O Repositório de Consultas tem um mecanismo para impor o Otimizador de Consultas ao uso de determinado plano de execução. No entanto, existem algumas limitações que podem impedir que um plano seja aplicado.

Primeiro, se o plano contiver as seguintes construções:

  • Inserir instrução em massa
  • Referência a um quadro externo
  • Consulta distribuída ou operações de texto completo
  • Uso de consultas elásticas
  • Cursores dinâmicos ou de conjunto de teclas
  • Especificação de junção de estrela inválida

Observação

O Banco de Dados SQL do Azure e o SQL Server 2019 e versões de compilação posteriores dão suporte ao plano de forçar cursores estáticos e de avanço rápido.

Em segundo lugar, quando os objetos nos quais o plano depende não estão mais disponíveis:

  • Banco de dados (se o banco de dados, onde o plano se originou, não existe mais)
  • Índice (já não existe ou está desativado)

Finalmente, problemas com o plano em si:

  • Não é legal para consulta
  • O Otimizador de Consultas excedeu o número de operações permitidas
  • XML de plano formado incorretamente

Permissions

Requer a VIEW DATABASE STATE permissão.

Examples

A. Encontre o motivo pelo qual o SQL Server não pôde forçar um plano via QDS

Preste atenção às last_force_failure_reason_descforce_failure_count e colunas:

SELECT TOP 1000
    p.query_id,
    p.plan_id,
    p.last_force_failure_reason_desc,
    p.force_failure_count,
    p.last_compile_start_time,
    p.last_execution_time,
    q.last_bind_duration,
    q.query_parameterization_type_desc,
    q.context_settings_id,
    c.set_options,
    c.STATUS
FROM sys.query_store_plan p
INNER JOIN sys.query_store_query q
    ON p.query_id = q.query_id
INNER JOIN sys.query_context_settings c
    ON c.context_settings_id = q.context_settings_id
LEFT JOIN sys.query_store_query_text t
    ON q.query_text_id = t.query_text_id
WHERE p.is_forced_plan = 1
    AND p.last_force_failure_reason != 0;

B. Consulta para exibir os resultados do plano de consulta no Azure Synapse Analytics

Use a seguinte consulta de exemplo para localizar os 100 planos de execução mais recentes no Repositório de Consultas no Azure Synapse Analytics.

SELECT TOP 100
    plan_id,
    query_id,
    plan_group_id,
    engine_version,
    compatibility_level,
    query_plan_hash,
    query_plan,
    is_online_index_plan,
    is_trivial_plan,
    is_parallel_plan,
    is_forced_plan,
    is_natively_compiled,
    force_failure_count,
    last_force_failure_reason,
    last_force_failure_reason_desc,
    count_compiles,
    initial_compile_start_time,
    last_compile_start_time,
    last_execution_time,
    avg_compile_duration,
    last_compile_duration,
    plan_forcing_type,
    plan_forcing_type_desc
FROM sys.query_store_plan
ORDER BY last_execution_time DESC;