sys.dm_exec_plan_attributes

Aktualisiert: 12. Dezember 2006

Gibt eine Zeile pro Planattribut für den vom Planhandle angegebenen Plan zurück. Mit dieser Tabellenwertfunktion können Sie Details zu einem bestimmten Plan abrufen, z. B. die Cacheschlüsselwerte oder die Anzahl der aktuellen, gleichzeitigen Ausführungen des Planes.

ms189472.note(de-de,SQL.90).gifHinweis:
Einige der über diese Funktion zurückgegebenen Informationen werden der abwärtskompatiblen Sicht sys.syscacheobjects zugeordnet.

Syntax

sys.dm_exec_plan_attributes (plan_handle)

Argumente

  • plan_handle
    Führt eine eindeutige Identifizierung eines Abfrageplanes für einen ausgeführten Batch aus, dessen Plan sich im Plancache befindet. plan_handle ist vom Datentyp varbinary(64). Das Planhandle kann von der dynamischen Verwaltungssicht sys.dm_exec_cached_plans abgerufen werden.

Zurückgegebene Tabelle

Spaltenname

Datentyp

Beschreibung

attribute

varchar(128)

Name des Attributs, das diesem Plan zugeordnet ist. Einer der folgenden Typen:

Attribut

Datentyp

Beschreibung

set_optionsintGibt die Optionswerte an, mit denen der Plan kompiliert wurde.

objectidintEiner der Hauptschlüssel zur Suche nach einem Objekt im Cache. Dies ist die in sys.objects für Datenbankobjekte (Prozeduren, Sichten, Trigger usw.) gespeicherte Objekt-ID. Für Pläne vom Typ "Adhoc" oder "Prepared" ist dies ein interner Hash des Batchtextes.

dbidintDie ID der Datenbank, in der die Entität gespeichert ist, für die der Plan vorhanden ist. Für Ad-hoc-Pläne oder vorbereitete Pläne ist dies die Datenbank-ID, von der der Batch ausgeführt wird.

dbid_executeintFür in der Resource-Datenbank gespeicherte Systemobjekte die Datenbank-ID, von der der zwischengespeicherte Plan ausgeführt wird. In allen anderen Fällen ist der Wert gleich 0.

user_idintID des Schemas, das das Objekt enthält. Mit dem Wert -2 wird angegeben, dass der abgesendete Batch nicht von der impliziten Namensauflösung abhängt und von verschiedenen Benutzern gemeinsam verwendet werden kann. Dies ist die bevorzugte Methode.

language_idsmallintID der Sprache der Verbindung, die das Cacheobjekt erstellt hat. Weitere Informationen finden Sie unter sys.syslanguages (Transact-SQL).

date_formatsmallintDatumsformat der Verbindung, die das Cacheobjekt erstellt hat. Weitere Informationen finden Sie unter SET DATEFORMAT (Transact-SQL).

date_firsttinyintErster Datumswert. Weitere Informationen finden Sie unter SET DATEFIRST (Transact-SQL).

statusintInterne Statusbits, die Teil des Cachesuchschlüssels sind.

required_cursor_optionsintVom Benutzer angegebene Cursoroptionen, z. B. der Cursortyp.

acceptable_cursor_optionsintCursoroptionen, in die von SQL Server eine implizite Konvertierung vorgenommen werden kann, um die Ausführung der Anweisung zu unterstützen. Beispielsweise kann der Benutzer einen dynamischen Cursor angeben, doch kann dieser Cursortyp vom Abfrageoptimierer in einen statischen Cursor konvertiert werden. Weitere Informationen finden Sie unter Verwenden impliziter Cursorkonvertierungen.

inuse_exec_contextintDie Anzahl der derzeit ausgeführten Batches, die den Abfrageplan verwenden. Weitere Informationen zum Ausführungskontext und zu Abfrageplänen finden Sie unter Zwischenspeichern und Wiederverwenden von Ausführungsplänen.

free_exec_contextintDie Anzahl der zwischengespeicherten Ausführungskontexte für den Abfrageplan, die derzeit nicht verwendet werden.

hits_exec_contextintDie Anzahl der Vorgänge, bei denen der Ausführungskontext aus dem Plancache abgerufen und wiederverwendet wurde, wodurch der Aufwand zum erneuten Kompilieren der SQL-Anweisung eingespart wird. Der Wert ist ein aggregierter Wert für alle bisherigen Batchausführungen.

misses_exec_contextintDie Anzahl der Vorgänge, bei denen ein Ausführungskontext im Plancache nicht gefunden wurde, was zum Erstellen eines neuen Ausführungskontexts für die Batchausführung führt.

removed_exec_contextintDie Anzahl der Ausführungskontexte, die aufgrund ungenügenden Arbeitsspeichers für den zwischengespeicherten Plan entfernt wurden.

inuse_cursorsintDie Anzahl der derzeit ausgeführten Batches, die einen oder mehrere Cursor enthalten, die den zwischengespeicherten Plan verwenden.

free_cursorsintDie Anzahl der im Leerlauf befindlichen oder freien Cursor für den zwischengespeicherten Plan.

hits_cursorsintDie Anzahl der Vorgänge, bei denen ein inaktiver Cursor aus dem zwischengespeicherten Plan abgerufen und wiederverwendet wurde. Der Wert ist ein aggregierter Wert für alle bisherigen Batchausführungen.

misses_cursorsintDie Anzahl der Vorgänge, bei denen im Cache kein inaktiver Cursor gefunden werden konnte.

removed_cursorsintDie Anzahl der Cursor, die aufgrund ungenügenden Arbeitsspeichers für den zwischengespeicherten Plan entfernt wurden.

sql_handlevarbinary(64)Das SQL-Handle für den Batch.

value

sql_variant

Wert des Attributs, das diesem Plan zugeordnet ist.

is_cache_key

bit

Gibt an, ob das Attribut als Teil des Cachesuchschlüssels für den Plan verwendet wird.

Hinweise

SET-Optionen

Kopien desselben kompilierten Planes unterscheiden sich möglicherweise nur durch den Wert in der set_options-Spalte. Dies weist darauf hin, dass verschiedene Verbindungen für die gleiche Abfrage unterschiedliche Sätze von SET-Optionen verwenden. Die Verwendung unterschiedlicher Sätze von Optionen ist meist unerwünscht, da dies zusätzliche Kompilierungen, einen geringeren Anteil von Wiederverwendungen von Plänen sowie, da im Cache mehrere Pläne vorhanden sind, eine Vergrößerung des Plancaches verursachen kann. Weitere Informationen finden Sie unter Empfehlungen für die Abfrageoptimierung.

Auswerten von SET-Optionen

Wenn der in set_options zurückgegebene Wert in die Optionen übersetzt werden soll, mit denen der Plan kompiliert wurde, subtrahieren Sie die Werte vom set_options-Wert, wobei Sie mit dem größtmöglichen Wert beginnen und den Vorgang bis 0 fortsetzen. Jeder subtrahierte Wert entspricht einer Option, die im Abfrageplan verwendet wurde. Wenn z. B. der Wert in set_options 251 lautet, wurde der Plan mit den folgenden Optionen kompiliert: ANSI_NULL_DFLT_ON (128), QUOTED_IDENTIFIER (64), ANSI_NULLS(32), ANSI_WARNINGS (16), CONCAT_NULL_YIELDS_NULL (8), Parallel Plan(2) und ANSI_PADDING (1).

Option Wert

ANSI_PADDING

1

Paralleler 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

Gibt an, dass im Plan keine Arbeitstabelle verwendet wird, um einen FOR BROWSE-Vorgang zu implementieren.

512

TriggerOneRow

Gibt an, dass der Plan Optimierungen einzelner Zeilen für AFTER- und INSTEAD OF-Trigger umfasst. Das heißt, diese Option wird festgelegt, wenn nur eine Zeile in der inserted-Tabelle oder der deleted-Tabelle betroffen ist. Gilt für Transact-SQL-Trigger und CLR-Trigger, die In-Process-Datenzugriff ausführen.

1024

ResyncQuery

Gibt an, dass die Abfrage von internen gespeicherten Systemprozeduren übermittelt wurde.

2048

ARITH_ABORT

4096

NUMERIC_ROUNDABORT

8192

DATEFIRST

16384

DATEFORMAT

32768

LanguageID

65536

UPON

Gibt an, dass die Datenbankoption PARAMETERIZATION beim Kompilieren des Planes auf FORCED festgelegt wurde.

131072

Cursor

Inaktive Cursor werden in einem kompilierten Plan zwischengespeichert, sodass der zum Speichern des Cursors verwendete Arbeitsspeicher von gleichzeitigen Benutzern des Cursors wiederverwendet werden kann. Angenommen, dass ein Cursor von einem Batch deklariert und verwendet wird, ohne dass seine Zuordnung aufgehoben wird. Wenn zwei Benutzer denselben Batch ausführen, sind zwei aktive Cursor vorhanden. Sobald die Zuordnung der Cursor aufgehoben ist (möglicherweise in unterschiedlichen Batches), wird der Arbeitsspeicher zum Speichern des Cursors zwischengespeichert und nicht freigegeben. Der Liste der inaktiven Cursor wird im kompilierten Plan beibehalten. Bei der nächsten Ausführung des Batches durch einen Benutzer wird der zwischengespeicherte Arbeitsspeicher für den Cursor wiederverwendet und als aktiver Cursor ordnungsgemäß initialisiert.

Auswerten von Cursoroptionen

Wenn der in required_cursor_options und acceptable_cursor_options zurückgegebene Wert in die Optionen übersetzt werden soll, mit denen der Plan kompiliert wurde, subtrahieren Sie die Werte vom Spaltenwert, wobei Sie mit dem größtmöglichen Wert beginnen und den Vorgang bis 0 fortsetzen. Jeder subtrahierte Wert entspricht einer Cursoroption, die im Abfrageplan verwendet wurde.

Option Wert

None

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

Berechtigungen

Erfordert die VIEW SERVER STATE-Berechtigung auf dem Server.

Beispiele

A. Zurückgeben der Attribute für einen bestimmten Plan

Im folgenden Beispiel werden alle Planattribute für einen angegebenen Plan zurückgegeben. Die dynamische Verwaltungssicht sys.dm_exec_cached_plans wird zuerst abgefragt, um das Planhandle für den angegebenen Plan abzurufen. In der zweiten Abfrage ersetzen Sie <plan_handle> durch einen Planhandlewert aus der ersten Abfrage.

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. Zurückgeben der SET-Optionen für kompilierte Pläne und des SQL-Handles für zwischengespeicherte Pläne

Im folgenden Beispiel wird ein Wert zurückgegeben, der die Optionen darstellt, mit denen die einzelnen Pläne kompiliert wurden. Zusätzlich werden der SQL-Text und das SQL-Handle zurückgegeben.

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

Siehe auch

Verweis

Dynamische Verwaltungssichten und -funktionen
Dynamische Verwaltungssichten und -funktionen im Zusammenhang mit der Ausführung
sys.dm_exec_cached_plans
sys.databases (Transact-SQL)
sys.objects (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

12. Dezember 2006

Neuer Inhalt:
  • Die in der Attribute-Spalte zurückgegebenen Attribute wurden aufgeführt.
  • Die Abschnitte mit den Hinweisen und Beispielen wurden hinzugefügt.