Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2016 (13.x) e versões
posteriores Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL 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_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<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: consulta tenta modificar dados enquanto a tabela de destino tem um índice que está sendo criado onlineOPTIMIZATION_REPLAY_FAILED: O script de repetição de otimização falhou ao ser executado.INVALID_STARJOIN: plano contém especificação StarJoin inválidaTIME_OUT: O otimizador excedeu o número de operações permitidas ao procurar o plano especificado pelo plano forçadoNO_DB: Um banco de dados especificado no plano não existeHINT_CONFLICT: A consulta não pode ser compilada porque o plano entra 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 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 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 um modo de exibição indexado referenciado 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 | 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: 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 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;
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)
- Vistas do catálogo do sistema (Transact-SQL)
- Procedimentos armazenados do Repositório de Consultas (Transact-SQL)