sys.query_store_plan (Transact-SQL)
Aplica-se a: SQL Server 2016 (13.x) e posterior Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics
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_plan armazenado. 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_plan_forced é 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ídaONLINE_INDEX_BUILD : tenta modificar os dados enquanto a tabela de destino tem um índice que está sendo criado onlineOPTIMIZATION_REPLAY_FAILED : Falha ao executar o script de reprodução de otimização.INVALID_STARJOIN : o plano contém uma especificação StarJoin inválidaTIME_OUT : O otimizador excedeu o número de operações permitidas ao pesquisar o plano especificado pelo plano forçadoNO_DB : Não existe um banco de dados especificado no planoHINT_CONFLICT : A consulta não pode ser compilada porque o plano está em conflito com uma dica de consultaDQ_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 consultaNO_INDEX : O índice especificado no plano não existe maisVIEW_COMPILE_FAILED : Não foi possível forçar o plano de consulta devido a um problema em uma exibição indexada referenciada no planoGENERAL_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 planoMANUAL : Plano forçado pelo usuárioAUTO : 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;
Conteúdo relacionado
- Monitorar o desempenho usando o Repositório de Consultas
- sys.database_query_store_options (Transact-SQL)
- sys.query_context_settings (Transact-SQL)
- sys.query_store_query (Transact-SQL)
- sys.query_store_query_text (Transact-SQL)
- sys.query_store_runtime_stats (Transact-SQL)
- sys.query_store_wait_stats (Transact-SQL)
- sys.query_store_runtime_stats_interval (Transact-SQL)
- Exibições de catálogo do sistema (Transact-SQL)
- Procedimentos armazenados do Repositório de Consultas (Transact-SQL)