Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 Analytics
no 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_CLIENT8637: ONLINE_INDEX_BUILD8675: OPTIMIZATION_REPLAY_FAILED8683: INVALID_STARJOIN8684: TIME_OUT8689: NO_DB8690: HINT_CONFLICT8691: SETOPT_CONFLICT8694: DQ_NO_FORCING_SUPPORTED8698: NO_PLAN8712: NO_INDEX8713: VIEW_COMPILE_FAILED<O outro valor>: GENERAL_FAILUREObservaçã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: NONE1: MANUAL2: 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)