sys.dm_exec_plan_attributes (Transact-SQL)
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 Plans.
Hinweis |
---|
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 Abfrageausführungsplans 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 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Attribut |
varchar(128) |
Name des Attributs, das diesem Plan zugeordnet ist. Eines der folgenden Attribute:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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. |
Berechtigungen
Erfordert die VIEW SERVER STATE-Berechtigung auf dem Server.
Hinweise
SET-Optionen
Kopien desselben kompilierten Plans 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.
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 Deltatabellen von AFTER-Triggern umfasst. |
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 Plans 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 |
---|---|
Keine |
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 |
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. Außerdem wird das SQL-Handle für alle zwischengespeicherten Pläne zurückgegeben.
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
Siehe auch
Verweis
Dynamische Verwaltungssichten und Funktionen (Transact-SQL)
Dynamische Verwaltungssichten und -funktionen im Zusammenhang mit der Ausführung (Transact-SQL)