VENDITE: 1-800-867-1389
Informazioni
L'argomento richiesto è visualizzato di seguito, ma non è incluso in questa libreria.

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 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).

sys.dm_exec_plan_attributes ( plan_handle )

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.

Nome colonna

Tipo di dato

Descrizione

attributo

varchar(128)

Nome dell'attributo associato al piano. Uno dei valori seguenti:

Attributo

Tipo di dato

Descrizione

set_options

int

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

objectid

int

Una 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 di 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.

dbid

int

ID del database contenente l'entità alla quale fa riferimento il piano.

Per i piani ad hoc o preparati, corrisponde all'ID del database da cui viene eseguito il batch.

dbid_execute

int

Per 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_id

int

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. Qualsiasi altro valore rappresenta l'ID dell'utente che invia la query al database.

language_id

smallint

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

date_format

smallint

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

date_first

tinyint

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

status

int

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

required_cursor_options

int

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

acceptable_cursor_options

int

Opzioni 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.

inuse_exec_context

int

Numero di batch in esecuzione che utilizzano il piano di query.

free_exec_context

int

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

hits_exec_context

int

Numero 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_context

int

Numero 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_context

int

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

inuse_cursors

int

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

free_cursors

int

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

hits_cursors

int

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

misses_cursors

int

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

removed_cursors

int

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

sql_handle

varbinary (64)

Handle SQL per il batch.

merge_action_type

smallint

Il tipo di piano di esecuzione del trigger utilizzato come risultato di un'istruzione MERGE.

0 indicano un piano non-trigger, un piano del trigger che non viene eseguito come risultato di un'istruzione MERGE o un piano del trigger che viene eseguito come risultato di un'istruzione MERGE in cui viene specificata solo un'azione DELETE.

1 indica un piano di trigger INSERT che è in esecuzione come risultato di un'istruzione MERGE.

2 indica un piano di trigger UPDATE in esecuzione come risultato di un'istruzione MERGE.

3 indica un piano di trigger DELETE che viene eseguito come risultato di un'istruzione MERGE che contiene un'azione INSERT o UPDATE corrispondente.

Per i trigger nidificati eseguiti da azioni a catena, questo valore è l'azione dell'istruzione MERGE che provoca la propagazione.

Valore

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.

È richiesta l'autorizzazione VIEW SERVER STATE nel server.

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

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
Il documento è risultato utile?
(1500 caratteri rimanenti)
Grazie per i commenti inviati.

Aggiunte alla community

Mostra:
© 2014 Microsoft