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 0 sempre . |
is_trivial_plan |
bit | Il piano è un piano semplice (output nella fase 0 di Query Optimizer). Nota: Azure Synapse Analytics restituisce 0 sempre . |
is_parallel_plan |
bit | Il piano è parallelo. Nota: Azure Synapse Analytics restituisce 1 sempre . |
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_id riferimento . 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_id riferimento . 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 0 sempre . |
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 0 sempre . |
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 0 sempre . |
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 0 sempre . |
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 completamentoONLINE_INDEX_BUILD : la query tenta di modificare i dati mentre la tabella di destinazione ha un indice in fase di compilazione onlineOPTIMIZATION_REPLAY_FAILED : non è stato possibile eseguire lo script di riproduzione dell'ottimizzazione.INVALID_STARJOIN : il piano contiene una specifica StarJoin non validaTIME_OUT : Optimizer ha superato il numero di operazioni consentite durante la ricerca del piano specificato dal piano forzatoNO_DB : un database specificato nel piano non esisteHINT_CONFLICT : la query non può essere compilata perché il piano è in conflitto con un hint per la queryDQ_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 queryNO_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 pianoGENERAL_FAILURE : errore forzato generale (non coperto da altri motivi)Nota: Azure Synapse Analytics restituisce NONE sempre . |
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 pianoMANUAL : pianificare forzatamente dall'utenteAUTO : 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_type
is_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;
Contenuto correlato
- Monitorare le prestazioni tramite Query Store
- 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)
- Viste del catalogo di sistema (Transact-SQL)
- Stored procedure di Query Store (Transact-SQL)