sys.query_store_plan (Transact-SQL)

Si applica a: SQL Server 2016 (13.x) e versioni successive database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics

Contiene informazioni su ogni piano di esecuzione associato a una query.

Nome colonna Tipo di dati Descrizione
plan_id bigint Chiave primaria.
query_id bigint Chiave esterna. Join a sys.query_store_query (Transact-SQL).
plan_group_id bigint ID del gruppo di piani. Le query di cursore richiedono in genere più piani (popolamento e recupero). Popolare e recuperare i piani compilati insieme si trovano nello stesso gruppo.

0 significa che il piano non si trova in un gruppo.
engine_version nvarchar(32) Versione del motore usata per compilare il piano in <major>.<minor>.<build>.<revision> formato .
compatibility_level smallint Livello di compatibilità del database a cui si fa riferimento nella query.
query_plan_hash binary(8) Hash MD5 del singolo piano.
query_plan nvarchar(max) Showplan XML per il piano di query.
is_online_index_plan bit Il piano è stato usato durante una compilazione di indici online.

Nota: Azure Synapse Analytics restituisce 0sempre .
is_trivial_plan bit Il piano è un piano semplice (output nella fase 0 di Query Optimizer).

Nota: Azure Synapse Analytics restituisce 0sempre .
is_parallel_plan bit Il piano è parallelo.

Nota: Azure Synapse Analytics restituisce 1sempre .
is_forced_plan bit Il piano viene contrassegnato come forzato quando l'utente esegue la stored procedure sys.sp_query_store_force_plan. Il meccanismo forzato non garantisce che questo piano esatto venga usato per la query a cui fa query_idriferimento . L'uso forzato del piano causa la compilazione della query e in genere produce esattamente lo stesso piano o un piano simile al piano a cui fa plan_idriferimento . Se l'uso forzato del piano non riesce, force_failure_count viene incrementato e last_force_failure_reason viene popolato con il motivo dell'errore.

Nota: Azure Synapse Analytics restituisce 0sempre .
is_natively_compiled bit Il piano include procedure ottimizzate per la memoria compilate in modo nativo. (0 = FALSE, 1 = TRUE).

Nota: Azure Synapse Analytics restituisce 0sempre .
force_failure_count bigint Numero di volte in cui l'uso forzato del piano non è riuscito. Può essere incrementato solo quando la query viene ricompilata (non in ogni esecuzione). Reimposta ogni 0 volta che is_plan_forced viene modificato da FALSE a TRUE.

Nota: Azure Synapse Analytics restituisce 0sempre .
last_force_failure_reason int Motivo per cui l'uso forzato del piano non è riuscito.

0: nessun errore; in caso contrario, numero di errore dell'errore che ha causato l'errore forzato
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
<altro valore>: GENERAL_FAILURE

Nota: Azure Synapse Analytics restituisce 0sempre .
last_force_failure_reason_desc nvarchar(128) Descrizione testuale di last_force_failure_reason.

COMPILATION_ABORTED_BY_CLIENT: compilazione di query interrotta dal client prima del completamento
ONLINE_INDEX_BUILD: la query tenta di modificare i dati mentre la tabella di destinazione ha un indice in fase di compilazione online
OPTIMIZATION_REPLAY_FAILED: non è stato possibile eseguire lo script di riproduzione dell'ottimizzazione.
INVALID_STARJOIN: il piano contiene una specifica StarJoin non valida
TIME_OUT: Optimizer ha superato il numero di operazioni consentite durante la ricerca del piano specificato dal piano forzato
NO_DB: un database specificato nel piano non esiste
HINT_CONFLICT: la query non può essere compilata perché il piano è in conflitto con un hint per la query
DQ_NO_FORCING_SUPPORTED: non è possibile eseguire query perché il piano è in conflitto con l'uso di query distribuite o operazioni full-text.
NO_PLAN: Query Processor non è riuscito a generare un piano di query perché non è stato possibile verificare il piano forzato come valido per la query
NO_INDEX: indice specificato nel piano non esiste più
VIEW_COMPILE_FAILED: non è stato possibile forzare il piano di query a causa di un problema in una vista indicizzata a cui si fa riferimento nel piano
GENERAL_FAILURE: errore forzato generale (non coperto da altri motivi)

Nota: Azure Synapse Analytics restituisce NONEsempre .
count_compiles bigint Pianificare le statistiche di compilazione.
initial_compile_start_time datetimeoffset Pianificare le statistiche di compilazione.
last_compile_start_time datetimeoffset Pianificare le statistiche di compilazione.
last_execution_time datetimeoffset L'ora dell'ultima esecuzione fa riferimento all'ultima ora di fine della query o del piano.
avg_compile_duration float Pianificare le statistiche di compilazione, in microsecondi. Dividere per 1.000.000 per ottenere secondi.
last_compile_duration bigint Pianificare le statistiche di compilazione, in microsecondi. Dividere per 1.000.000 per ottenere secondi.
plan_forcing_type int Si applica a: SQL Server 2017 (14.x) e versioni successive

Tipo forzato del piano.

0: NONE
1: MANUAL
2: AUTO
plan_forcing_type_desc nvarchar(60) Si applica a: SQL Server 2017 (14.x) e versioni successive

Descrizione del testo di plan_forcing_type.

NONE: nessuna forzatura del piano
MANUAL: pianificare forzatamente dall'utente
AUTO: pianificare forzatamente l'ottimizzazione automatica.
has_compile_replay_script bit Si applica a: SQL Server 2022 (16.x) e versioni successive

Indica se al piano è associato uno script di riproduzione dell'ottimizzazione:
0 = Nessun script di ottimizzazione per la riproduzione (nessuno o nemmeno non valido).
1 = script di riproduzione dell'ottimizzazione registrati.

Non applicabile ad Azure Synapse Analytics.
is_optimized_plan_forcing_disabled bit Si applica a: SQL Server 2022 (16.x) e versioni successive

Indica se l'uso forzato del piano ottimizzato è stato disabilitato per il piano:
0 = Disabilitato.
1 = non disabilitato.

Non applicabile ad Azure Synapse Analytics.
plan_type int Si applica a: SQL Server 2022 (16.x) e versioni successive

Tipo di piano.
0: Piano compilato
1: Piano dispatcher
2: Piano varianti di query

Non applicabile ad Azure Synapse Analytics.
plan_type_desc nvarchar(120) Si applica a: SQL Server 2022 (16.x) e versioni successive

Descrizione testuale del tipo di piano.
Piano compilato: indica che il piano è un piano non sensibile ai parametri ottimizzato
Piano dispatcher: indica che il piano è un piano dispatcher ottimizzato per i piani sensibili ai parametri
Piano varianti query: indica che il piano è un piano di variante di query ottimizzato per i parametri

Non applicabile ad Azure Synapse Analytics.

Osservazioni:

È possibile forzare più piani quando Query Store per le repliche secondarie è abilitato.

In Azure Synapse Analytics, usando le colonne has_compile_replay_script, plan_typeis_optimized_plan_forcing_disabled, , plan_type_desc genera un Invalid Column Name errore perché non sono supportate. Vedere l'esempio B per un esempio di come usare sys.query_store_plan in Azure Synapse Analytics.

Limitazioni per l'uso forzato dei piani

Query Store è dotato di un meccanismo per imporre a Query Optimizer l'uso di determinati piani di esecuzione. Esistono tuttavia alcune limitazioni che possono impedire l'imposizione di un piano.

In primo luogo, se il piano contiene i costrutti seguenti:

  • Inserisci istruzione bulk
  • Riferimento a una tabella esterna
  • Query distribuita o operazioni full-text
  • Uso di query elastiche
  • Cursori dinamici o keyset
  • Specifica di join a stella non valida

Nota

database SQL di Azure e SQL Server 2019 e versioni successive supportano l'uso forzato del piano per i cursori statici e rapidi.

In secondo luogo, quando gli oggetti su cui si basa il piano non sono più disponibili:

  • Database (se il database, in cui è stato originato il piano, non esiste più)
  • Indice (non più esistente o disabilitato)

Infine, problemi del piano stesso:

  • Piano non valido per query
  • Numero di operazioni consentite per Query Optimizer superato
  • XML del piano formato in modo non corretto

Autorizzazioni

È necessaria l'autorizzazione VIEW DATABASE STATE.

Esempi

R. Trovare il motivo per cui SQL Server non è riuscito a forzare un piano tramite QDS

Prestare attenzione alle last_force_failure_reason_desc colonne 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. Query per visualizzare i risultati del piano di query in Azure Synapse Analytics

Usare la query di esempio seguente per trovare i 100 piani di esecuzione più recenti in Query Store in 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;