Condividi tramite


sys.dm_exec_plan_attributes

Data aggiornamento: 12 dicembre 2006

Restituisce una riga per ogni attributo del piano specificato dall'handle di piano. È possibile utilizzare questa funzione valutata a livello 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.

Sintassi

sys.dm_exec_plan_attributes (plan_handle)

Argomenti

  • plan_handle
    Identifica 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

attribute

varchar(128)

Nome dell'attributo associato al piano. I valori validi sono:

Attributo

Tipo di dati

Descrizione

set_optionsintIndica i valori delle opzioni con cui è stato compilato il piano.

objectidintUna delle chiavi principali utilizzate per la ricerca di un oggetto nella cache. Corrisponde all'ID di oggetto archiviato nella tabella sys.objects per gli oggetti del database (procedure, viste, trigger e così via). Per i piani di tipo ad hoc o preparati, questo attributo corrisponde a un hash interno del testo del batch.

dbidintID del database in cui si trova l'entità per cui è stato creato il piano. Per i piani ad hoc o preparati, corrisponde all'ID del database da cui viene eseguito il batch.

dbid_executeintPer gli oggetti di sistema archiviati nel database Resource, corrisponde all'ID del database da cui viene eseguito il piano memorizzato nella cache. In tutti gli altri casi è 0.

user_idintID dello schema che include l'oggetto. Il valore -2 indica che il batch inviato non dipende dalla risoluzione implicita del nome e può essere condiviso da diversi utenti. Corrisponde al metodo migliore.

language_idsmallintID della lingua della connessione in cui è stato creato l'oggetto della cache. Per ulteriori informazioni, vedere sys.syslanguages (Transact-SQL).

date_formatsmallintFormato della data della connessione in cui è stato creato l'oggetto della cache. Per ulteriori informazioni, vedere SET DATEFORMAT (Transact-SQL).

date_firsttinyintPrimo valore di data. Per ulteriori informazioni, vedere SET DATEFIRST (Transact-SQL).

statusintBit di stato interni che fanno parte della chiave di ricerca nella cache.

required_cursor_optionsintOpzioni di cursore specificate dall'utente, ad esempio il tipo di cursore.

acceptable_cursor_optionsintOpzioni di cursore che potrebbero essere convertite in modo implicito da SQL Server per supportare l'esecuzione dell'istruzione. Ad esempio, l'utente potrebbe specificare un cursore dinamico, ma Query Optimizer è autorizzato a convertire questo tipo di cursore in un cursore statico. Per ulteriori informazioni, vedere Utilizzo della conversione implicita del cursore.

inuse_exec_contextintNumero di batch in esecuzione che utilizzano il piano di query. Per ulteriori informazioni sul contesto di esecuzione e i piani di query, vedere Caching e riutilizzo del piano di esecuzione.

free_exec_contextintNumero di contesti di esecuzione memorizzati nella cache per il piano di query, attualmente inutilizzati.

hits_exec_contextintNumero di riutilizzi del contesto di esecuzione recuperato dalla cache dei piani, con conseguente risparmio dell'overhead correlato alla ricompilazione dell'istruzione SQL. Il valore rappresenta un'aggregazione per tutti i batch eseguiti finora.

misses_exec_contextintNumero di volte in cui non è stato possibile trovare un contesto di esecuzione nella cache dei piani, con conseguente creazione di un nuovo contesto di esecuzione per l'esecuzione del batch.

removed_exec_contextintNumero di contesti di esecuzione rimossi a causa di richieste di memoria eccessive per il piano memorizzato nella cache.

inuse_cursorsintNumero di batch in esecuzione che contengono uno o più cursori che utilizzano il piano memorizzato nella cache.

free_cursorsintNumero di cursori inattivi o liberi per il piano memorizzato nella cache.

hits_cursorsintNumero di riutilizzi di un cursore inattivo ottenuto dal piano memorizzato nella cache. Il valore rappresenta un'aggregazione per tutti i batch eseguiti finora.

misses_cursorsintNumero di volte in cui non è stato possibile trovare un cursore inattivo nella cache.

removed_cursorsintNumero di cursori rimossi a causa di richieste di memoria eccessive per il piano memorizzato nella cache.

sql_handlevarbinary(64)Handle SQL per il batch.

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.

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 gruppi di opzioni SET diversi per la stessa query. L'utilizzo di gruppi 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. Per ulteriori informazioni, vedere Consigli per l'ottimizzazione delle query.

Valutazione delle opzioni SET

Per convertire il valore restituito nella colonna set_options nelle opzioni utilizzate per compilare il piano, sottrarre i valori dal valore 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 di riga singola per i trigger AFTER e INSTEAD OF. Ciò significa che se nelle tabelle inserted o deleted è interessata solo una riga, questa opzione è impostata. Si applica ai trigger Transact-SQL e ai trigger CLR che eseguono l'accesso ai dati in-process.

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

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

Nessuna

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

Autorizzazioni

È richiesta l'autorizzazione VIEW SERVER STATE nel server.

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 piano 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. Vengono inoltre restituiti il testo SQL e l'handle SQL.

SELECT plan_handle, pvt.set_options, pvt.sql_handle, text
FROM (
    SELECT plan_handle, epa.attribute, epa.value, st.text 
    FROM sys.dm_exec_cached_plans 
        OUTER APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa
        CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
    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
Funzioni e viste a gestione dinamica relative all'esecuzione
sys.dm_exec_cached_plans
sys.databases (Transact-SQL)
sys.objects (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

12 dicembre 2006

Nuovo contenuto:
  • Elenco degli attributi restituiti nella colonna Attribute.
  • Aggiunta delle sezioni Osservazioni ed Esempi.