sys.dm_exec_cached_plans (Transact-SQL)
Gibt eine Zeile für jeden Abfrageplan zurück, der von SQL Server für eine schnellere Abfrageausführung zwischengespeichert wird. In dieser dynamischen Verwaltungssicht können Sie nach zwischengespeicherten Abfrageplänen, zwischengespeichertem Abfragetext, dem von zwischengespeicherten Plänen verwendeten Arbeitsspeicher und der Anzahl von Wiederverwendungen für zwischengespeicherte Pläne suchen.
Hinweis |
---|
Für Abfragepläne wird die dynamische Verwaltungssicht sys.dm_exec_cached_plans der syscacheobjects-Systemtabelle in SQL Server 2000 zugeordnet. |
Spaltenname |
Datentyp |
Beschreibung |
---|---|---|
bucketid |
int |
ID des Hashbuckets, in dem der Eintrag gespeichert ist. Der Wert gibt einen Bereich von 0 bis zur Hashtabellengröße für den Typ des Caches an. Für die SQL-Plan- und Objektplancaches kann die Hashtabellengröße in 32-Bit-Systemen bis zu 10007 und in 64-Bit-Systemen bis zu 40009 betragen. Für den Cache für gebundene Strukturen kann die Hashtabellengröße in 32-Bit-Systemen bis zu 1009 und in 64-Bit-Systemen bis zu 4001 betragen. Für den Cache für erweiterte gespeicherte Prozeduren kann die Hashtabellengröße in 32-Bit-Systemen und 64-Bit-Systemen bis zu 127 betragen. Weitere Informationen zu Cachetypen und Hashtabellen finden Sie unter sys.dm_os_memory_cache_hash_tables (Transact-SQL). |
refcounts |
int |
Anzahl von Cacheobjekten, die auf dieses Cacheobjekt verweisen. Refcounts muss mindestens 1 betragen, wenn der Eintrag im Cache vorhanden sein soll. |
usecounts |
int |
Anzahl von Suchvorgängen, die für das Cacheobjekt ausgeführt wurden. Dieser Wert wird nicht erhöht, wenn parametrisierte Abfragen im Cache nach einem Plan suchen. Bei Verwendung von Showplan kann der Wert mehrmals erhöht werden. |
size_in_bytes |
int |
Anzahl von Bytes, die vom Cacheobjekt belegt werden. |
memory_object_address |
varbinary(8) |
Speicheradresse des zwischengespeicherten Eintrags. Dieser Wert kann mit sys.dm_os_memory_objects verwendet werden, um die Speicheraufteilung des zwischengespeicherten Plans abzurufen, und mit sys.dm_os_memory_cache_entries, um die Kosten für das Zwischenspeichern des Eintrags abzurufen. |
cacheobjtype |
nvarchar(34) |
Typ des Objekts im Cache. Die folgenden Werte sind möglich:
|
objtype |
nvarchar(16) |
Typ des Objekts. Die folgenden Werte sind möglich:
WertBeschreibung
ProcGespeicherte Prozedur
PreparedVorbereitete Anweisung
AdhocAd-hoc-Abfrage1
ReplikationsprozedurReplikationsfilterprozedur
TriggerTrigger
ViewSicht
DefaultStandard
UsrTabBenutzertabelle
SysTabSystemtabelle
CheckCHECK-Einschränkung
RuleRegel
|
plan_handle |
varbinary(64) |
Bezeichner für den speicherinternen Plan. Dieser Bezeichner ist vorübergehend und bleibt nur für die Dauer der Speicherung des Plans im Cache konstant. Dieser Wert kann mit den folgenden dynamischen Verwaltungsfunktionen verwendet werden: |
pool_id |
int |
Die ID des Ressourcenpools, auf die sich diese Planspeicherauslastung bezieht. |
1 Gilt für Transact-SQL-Abfragen, die als Sprachereignisse mit osql oder sqlcmd und nicht als Remoteprozeduraufrufe übermittelt werden.
Berechtigungen
Erfordert die VIEW SERVER STATE-Berechtigung auf dem Server.
Beispiele
A. Zurückgeben des Batchtexts zwischengespeicherter Einträge, die wiederverwendet werden
Im folgenden Beispiel wird der SQL-Text aller zwischengespeicherten Einträge zurückgegeben, die mehr als einmal verwendet wurden.
SELECT usecounts, cacheobjtype, objtype, text
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
WHERE usecounts > 1
ORDER BY usecounts DESC;
GO
B. Zurückgeben von Abfrageplänen für alle zwischengespeicherten Trigger
Im folgenden Beispiel werden die Abfragepläne für alle zwischengespeicherten Trigger zurückgegeben.
SELECT plan_handle, query_plan, objtype
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_query_plan(plan_handle)
WHERE objtype ='Trigger';
GO
C. Zurückgeben der SET-Optionen, mit denen der Plan kompiliert wurde
Im folgenden Beispiel werden die SET-Optionen zurückgegeben, mit denen der Plan kompiliert wurde. Das sql_handle für den Plan wird ebenfalls zurückgegeben. Der PIVOT-Operator wird verwendet, um die Attribute set_options und sql_handle als Spalten und nicht als Zeilen auszugeben. Weitere Informationen zum in set_options zurückgegebenen Wert finden Sie unter sys.dm_exec_plan_attributes (Transact-SQL).
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
D. Zurückgeben der Arbeitsspeicheraufteilung für alle zwischengespeicherten kompilierten Pläne
Im folgenden Beispiel wird die Aufteilung des Arbeitsspeichers zurückgegeben, der von allen kompilierten Plänen im Zwischenspeicher verwendet wird.
SELECT plan_handle, ecp.memory_object_address AS CompiledPlan_MemoryObject,
omo.memory_object_address, pages_allocated_count, type, page_size_in_bytes
FROM sys.dm_exec_cached_plans AS ecp
JOIN sys.dm_os_memory_objects AS omo
ON ecp.memory_object_address = omo.memory_object_address
OR ecp.memory_object_address = omo.parent_address
WHERE cacheobjtype = 'Compiled Plan';
GO
Siehe auch