DBCC FREEPROCCACHE (Transact-SQL)
Entfernt alle Elemente aus dem Plancache, entfernt einen bestimmten Plan aus dem Plancache durch Angabe eines Planhandles oder SQL-Handles oder entfernt alle einem angegebenen Ressourcenpool zugeordneten Cacheinträge.
Syntax
DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]
Argumente
( { plan_handle | sql_handle | pool_name } )
plan_handle führt eine eindeutige Identifizierung eines Abfrageplans für einen ausgeführten Batch aus, dessen Plan sich im Plancache befindet. plan_handle ist vom Datentyp varbinary(64) und kann aus den folgenden dynamischen Verwaltungsobjekten abgerufen werden:sql_handle ist das SQL-Handle für den zu löschenden Batch. sql_handle ist vom Datentyp varbinary(64) und kann von den folgenden dynamischen Verwaltungsobjekten abgerufen werden:
pool_name ist der Name des Ressourcenpools in der Ressourcenkontrolle. pool_name ist vom Datentyp sysname und kann durch Abfragen der dynamischen Verwaltungssicht sys.dm_resource_governor_resource_pools abgerufen werden.
Fragen Sie die dynamische Verwaltungssicht sys.dm_resource_governor_workload_groups ab, um einem Ressourcenpool eine Arbeitsauslastungsgruppe zur Ressourcenkontrolle zuzuordnen. Informationen über die Arbeitsauslastungsgruppe für eine Sitzung können Sie über die dynamische Verwaltungssicht sys.dm_exec_sessions abfragen.
WITH NO_INFOMSGS
Alle Informationsmeldungen werden unterdrückt.
Hinweise
Verwenden Sie DBCC FREEPROCCACHE, um den Plancache sorgfältig zu leeren. Durch das Leeren des Plancaches wird beispielsweise eine gespeicherte Prozedur erneut kompiliert, statt aus dem Cache erneut verwendet zu werden. Dies kann einen plötzlichen, vorübergehenden Abfall der Abfrageleistung verursachen. Das SQL Server-Fehlerprotokoll enthält für jeden geleerten Cachespeicher im Plancache folgende Meldung zur Information: "Von SQL Server wurden für den '%s'-Cachespeicher (Bestandteil des Plancaches) %d Leerungen des Cachespeichers gefunden, die von 'DBCC FREEPROCCACHE'- oder 'DBCC FREESYSTEMCACHE'-Vorgängen ausgelöst wurden". Diese Meldung wird alle fünf Minuten protokolliert, solange der Cache innerhalb dieses Zeitintervalls geleert wird.
Resultsets
Wenn die WITH NO_INFOMSGS-Klausel nicht angegeben ist, gibt DBCC FREEPROCCACHE folgende Meldung zurück:
"Die DBCC-Ausführung wurde abgeschlossen. Falls DBCC Fehlermeldungen ausgegeben hat, wenden Sie sich an den Systemadministrator."
Berechtigungen
Erfordert die ALTER SERVER STATE-Berechtigung auf dem Server.
Beispiele
A. Löschen eines Abfrageplans im Plancache
Im folgenden Beispiel wird ein Abfrageplan im Plancache gelöscht, indem das Abfrageplanhandle angegeben wird. Um sicherzustellen, dass die Beispielabfrage im Plancache vorhanden ist, wird die Abfrage zuerst ausgeführt. Durch Abfrage der dynamischen Verwaltungssichten sys.dm_exec_cached_plans und sys.dm_exec_sql_text wird das Planhandle für die Abfrage ermittelt. Der Planhandlewert aus dem Resultset wird dann in die DBCC FREEPROCACHE-Anweisung eingefügt, sodass nur dieser Plan aus dem Plancache entfernt wird.
USE AdventureWorks;
GO
SELECT * FROM Person.Address;
GO
SELECT plan_handle, st.text
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE text LIKE N'SELECT * FROM Person.Address%';
GO
Dies ist das Resultset.
plan_handle text
-------------------------------------------------- -----------------------------
0x060006001ECA270EC0215D05000000000000000000000000 SELECT * FROM Person.Address;
(1 Zeile(n) betroffen)
-- Remove the specific plan from the cache.
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);
GO
B. Löschen aller Pläne im Plancache
Im folgenden Beispiel werden alle Elemente im Plancache gelöscht. Die WITH NO_INFOMSGS -Klausel wird angegeben, um die Anzeige der Informationsmeldung zu verhindern.
DBCC FREEPROCCACHE WITH NO_INFOMSGS;
C. Löschen aller einem Ressourcenpool zugeordneten Cacheeinträge
Im folgenden Beispiel werden alle einem angegebenen Ressourcenpool zugeordneten Cacheeinträge gelöscht. Zunächst wird die sys.dm_resource_governor_resource_pools-Sicht abgefragt, um den Wert für pool_name zu erhalten.
SELECT * FROM sys.dm_resource_governor_resource_pools;
GO
DBCC FREEPROCCACHE (default);
GO
Änderungsverlauf
Aktualisierter Inhalt |
---|
Es wurden die Ressourcenpool-Informationen in der Einführung korrigiert, und dem Abschnitt "Argumente" wurden Informationen über Möglichkeiten zum Abruf der Namen der Ressourcenkontrollpools hinzugefügt. |
Beispiel C wurde hinzugefügt. |
Siehe auch