sys.dm_exec_plan_attributes (Transact-SQL)
Restituisce una riga per ogni attributo del piano specificato dall'handle di piano. È possibile utilizzare questa funzione con valori di tabella per recuperare informazioni dettagliate su un particolare piano, come i valori di chiave nella cache o il numero corrente di esecuzioni simultanee del piano.
Nota
Alcune informazioni restituite da questa funzione corrispondono a quelle disponibili nella vista di compatibilità con le versioni precedenti sys.syscacheobjects.
Si applica a: SQL Server (da SQL Server 2008 alla versione corrente). |
Sintassi
sys.dm_exec_plan_attributes ( plan_handle )
Argomenti
- plan_handle
Viene identificato in modo univoco un piano di query per un batch eseguito il cui piano risiede nella cache dei piani. plan_handle è di tipo varbinary(64). È possibile ottenere l'handle di piano dalla vista a gestione dinamica sys.dm_exec_cached_plans.
Tabella restituita
Nome colonna |
Tipo di dati |
Descrizione |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
attributo |
varchar(128) |
Nome dell'attributo associato al piano. Uno dei valori seguenti:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
value |
sql_variant |
Valore dell'attributo associato al piano. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
is_cache_key |
bit |
Indica se l'attributo viene utilizzato come parte della chiave di ricerca nella cache per il piano. |
Autorizzazioni
È richiesta l'autorizzazione VIEW SERVER STATE nel server.
Osservazioni
Opzioni SET
Più copie dello stesso piano compilato possono differire solo per il valore nella colonna set_options. Ciò indica che connessioni diverse utilizzano set di opzioni SET diversi per la stessa query. L'utilizzo di set diversi di opzioni è in genere poco consigliabile perché può causare compilazioni aggiuntive, un minore riutilizzo del piano e un aumento delle dimensioni della cache dei piani in seguito alla presenza di più copie dei piani.
Valutazione delle opzioni SET
Per convertire il valore restituito in set_options nelle opzioni utilizzate per compilare il piano, sottrarre i valori dal valore di set_options, a partire dal più grande, fino a raggiungere 0. Ogni valore sottratto corrisponde a un'opzione utilizzata nel piano di query. Ad esempio, se la colonna set_options indica il valore 251, le opzioni utilizzate per la compilazione del piano sono ANSI_NULL_DFLT_ON (128), QUOTED_IDENTIFIER (64), ANSI_NULLS(32), ANSI_WARNINGS (16), CONCAT_NULL_YIELDS_NULL (8), Parallel Plan(2) e ANSI_PADDING (1).
Opzione |
Valore |
---|---|
ANSI_PADDING |
1 |
Parallel Plan |
2 |
FORCEPLAN |
4 |
CONCAT_NULL_YIELDS_NULL |
8 |
ANSI_WARNINGS |
16 |
ANSI_NULLS |
32 |
QUOTED_IDENTIFIER |
64 |
ANSI_NULL_DFLT_ON |
128 |
ANSI_NULL_DFLT_OFF |
256 |
NoBrowseTable Indica che il piano non utilizza una tabella di lavoro per implementare un'operazione FOR BROWSE. |
512 |
TriggerOneRow Indica che il piano contiene l'ottimizzazione della singola riga per le tabelle delta del trigger AFTER. |
1024 |
ResyncQuery Indica che la query è stata inviata da stored procedure di sistema interne. |
2048 |
ARITH_ABORT |
4096 |
NUMERIC_ROUNDABORT |
8192 |
DATEFIRST |
16384 |
DATEFORMAT |
32768 |
LanguageID |
65536 |
UPON Indica che l'opzione di database PARAMETERIZATION era impostata su FORCED al momento della compilazione del piano. |
131072 |
ROWCOUNT |
Si applica a: SQL Server 2012 fino a SQL Server 2014 262144 |
Cursori
I cursori inattivi vengono memorizzati nella cache in un piano compilato in modo che la memoria utilizzata per archiviare il cursore possa essere riutilizzata da utenti simultanei dei cursori. Si supponga, ad esempio, che un batch dichiari e utilizzi un cursore senza deallocarlo. Se due utenti eseguono lo stesso batch, saranno presenti due cursori attivi. Dopo la deallocazione dei cursori, potenzialmente in batch diversi, la memoria utilizzata per archiviare il cursore viene assegnata alla cache e non rilasciata. Questo elenco dei cursori inattivi viene mantenuto nel piano compilato. In occasione della successiva esecuzione del batch, la memoria per il cursore nella cache verrà riutilizzata e inizializzata in modo appropriato come cursore attivo.
Valutazione delle opzioni di cursore
Per convertire il valore restituito in required_cursor_options e acceptable_cursor_options nelle opzioni utilizzate per compilare il piano, sottrarre i valori dal valore della colonna, a partire dal più grande, fino a raggiungere 0. Ogni valore sottratto corrisponde a un'opzione di cursore utilizzata nel piano di query.
Opzione |
Valore |
---|---|
Nessuno |
0 |
INSENSITIVE |
1 |
SCROLL |
2 |
READ ONLY |
4 |
FOR UPDATE |
8 |
LOCAL |
16 |
GLOBAL |
32 |
FORWARD_ONLY |
64 |
KEYSET |
128 |
DYNAMIC |
256 |
SCROLL_LOCKS |
512 |
OPTIMISTIC |
1024 |
STATIC |
2048 |
FAST_FORWARD |
4096 |
IN PLACE |
8192 |
FOR select_statement |
16384 |
Esempi
A.Restituzione degli attributi per un piano specifico
Nell'esempio seguente vengono restituiti tutti gli attributi per un piano specificato. Viene prima di tutto eseguita una query sulla vista a gestione dinamica sys.dm_exec_cached_plans per ottenere l'handle del piano specificato. Nella seconda query, sostituire <plan_handle> con il valore di handle di piani restituito dalla prima query.
SELECT plan_handle, refcounts, usecounts, size_in_bytes, cacheobjtype, objtype
FROM sys.dm_exec_cached_plans;
GO
SELECT attribute, value, is_cache_key
FROM sys.dm_exec_plan_attributes(<plan_handle>);
GO
B.Restituzione delle opzioni SET per i piani compilati e dell'handle SQL per i piani memorizzati nella cache
Nell'esempio seguente viene restituito un valore che rappresenta le opzioni con cui è stato compilato ogni piano. Inoltre, viene restituito l'handle SQL per tutti i piani memorizzati nella cache.
SELECT plan_handle, pvt.set_options, pvt.sql_handle
FROM (
SELECT plan_handle, epa.attribute, epa.value
FROM sys.dm_exec_cached_plans
OUTER APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa
WHERE cacheobjtype = 'Compiled Plan') AS ecpa
PIVOT (MAX(ecpa.value) FOR ecpa.attribute IN ("set_options", "sql_handle")) AS pvt;
GO
Vedere anche
Riferimento
Funzioni e viste a gestione dinamica (Transact-SQL)
Funzioni e viste a gestione dinamica relative all'esecuzione (Transact-SQL)