Compartilhar via


sys.query_store_plan (Transact-SQL)

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores do Banco de Dados SQL doAzure Azure Instância Gerenciada do Banco de Dados SQLdo Azure banco de dados SQL do Azure Synapse Analyticsno Microsoft Fabric

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

Nome da coluna Tipo de dados Descrição
plan_id bigint Chave primária.
query_id bigint Chave estrangeira. Une-se ao sys.query_store_query (Transact-SQL).
plan_group_id bigint ID do grupo de planos. As consultas de cursor normalmente exigem vários planos (popular e buscar). Popular e buscar planos que são compilados juntos estão no mesmo grupo.

0 significa que o plano não está em um grupo.
engine_version nvarchar(32) Versão do motor usado 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 binary(8) Hash MD5 do plano individual.
query_plan nvarchar(max) Plano de execução XML do plano de consulta.
is_online_index_plan bit O plano foi usado durante um build de índice online.

Observação: o Azure Synapse Analytics sempre retorna 0.
is_trivial_plan bit O plano é um plano trivial (saída na fase 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 O plano é 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. A imposição de 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 a imposição de plano não for bem-sucedida, force_failure_count será incrementada e last_force_failure_reason preenchida com o motivo da falha.

Observação: o Azure Synapse Analytics sempre retorna 0.
is_natively_compiled bit O plano inclui procedimentos otimizados para 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 a forçagem desse plano falhou. Ele só pode ser incrementado quando a consulta é recompilada (não em todas as execuções). Redefine para 0 cada vez que is_forced_plan é alterado de FALSE para TRUE.

Observação: o Azure Synapse Analytics sempre retorna 0.
last_force_failure_reason int Motivo pelo qual a forçagem do plano falhou.

0: sem falha, caso contrário, o número do erro que causou a falha da forçagem
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
<O 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: tenta modificar os dados enquanto a tabela de destino tem um índice que está sendo criado online
OPTIMIZATION_REPLAY_FAILED: Falha ao executar o script de reprodução de otimização.
INVALID_STARJOIN: o plano contém uma especificação StarJoin inválida
TIME_OUT: O otimizador excedeu o número de operações permitidas ao pesquisar o plano especificado pelo plano forçado
NO_DB: Não existe um banco de dados especificado no plano
HINT_CONFLICT: A consulta não pode ser compilada porque o plano está 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 consulta distribuída ou operações de texto completo.
NO_PLAN: O processador de consultas não pôde produzir o plano de consulta, pois 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 uma exibição indexada referenciada 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 Planejar estatísticas de compilação.
initial_compile_start_time datetimeoffset Planejar estatísticas de compilação.
last_compile_start_time datetimeoffset Planejar estatísticas de compilação.
last_execution_time datetimeoffset O último tempo de execução se refere à última hora de término da consulta/plano.
avg_compile_duration float Planeje estatísticas de compilação, em microssegundos. Divida por 1.000.000 para obter segundos.
last_compile_duration bigint Planeje 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

Tipo de forçagem de plano.

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 por sintonia automática.
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 reprodução de otimização associado a ele:
0 = nenhum script de reprodução de otimização (nenhum ou até mesmo inválido).
1 = script de reprodução de otimização registrado.

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 forçagem do plano otimizada foi desabilitada para o plano:
0 = desabilitado.
1 = não desabilitado.

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 de texto do tipo de plano.
Plano compilado: indica que o plano é um plano otimizado para plano não sensível a parâmetros
Plano do Dispatcher: Indica que o plano é um plano do Dispatcher otimizado para o plano sensível a parâmetros
Plano de Variante de Consulta: indica que o plano é um plano de variante de consulta otimizado para plano sensível a parâmetros

Não aplicável ao Azure Synapse Analytics.

Comentários

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, o uso de colunas has_compile_replay_script, is_optimized_plan_forcing_disabled, plan_type, plan_type_desc resulta em um Invalid Column Name erro, pois não há suporte para elas. Consulte o Exemplo B para obter um exemplo de como usar sys.query_store_plan no Azure Synapse Analytics.

Limitações forçadas do plano

O Repositório de Consultas tem um mecanismo para forçar o otimizador de consulta a usar um determinado plano de execução. No entanto, existem algumas limitações que podem impedir que um plano seja forçado.

Primeiro, se o plano contém as seguintes construções:

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

Observação

O Banco de Dados SQL do Azure e o SQL Server 2019 e versões de build posteriores dão suporte à imposição de plano para cursores estáticos e de avanço rápido.

Segundo, quando os objetos dos quais o plano depende, não estão mais disponíveis:

  • Banco de dados (se o banco de dados, onde o plano foi originado, não existir mais)
  • Índice (não existe mais ou está desabilitado)

Por fim, problemas com o próprio plano:

  • Não é válido para consulta
  • O otimizador de consulta excedeu o número de operações permitidas
  • XML do plano formatado incorretamente

Permissões

Requer a permissão VIEW DATABASE STATE.

Exemplos

R. Encontrar o motivo pelo qual o SQL Server não pôde forçar um plano por meio do QDS

Preste atenção às last_force_failure_reason_desc colunas e force_failure_count :

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 consulta de exemplo a seguir 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;