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.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]

Argumente

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. Für jeden geleerten Cachespeicher im Plancache enthält das SQL Server-Fehlerprotokoll 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 so lange alle fünf Minuten protokolliert, wie 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 AdventureWorks2008R2;
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