DBCC FREEPROCCACHE (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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.

Hinweis

DBCC FREEPROCCACHE bereinigt die Ausführungsstatistik für nativ kompilierte gespeicherte Prozeduren nicht. Der Prozedurcache enthält keine Informationen zu nativ kompilierten gespeicherten Prozeduren. Jede Ausführungsstatistik, die aus Prozedurausführungen erfasst wird, wird in den DMVs der Ausführungsstatistik angezeigt: sys.dm_exec_procedure_stats (Transact-SQL) und sys.dm_exec_query_plan (Transact-SQL).

Transact-SQL-Syntaxkonventionen

Syntax

Syntax für SQL Server und Azure SQL-Datenbank:

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

Syntax für Azure Synapse Analytics und Analytics-Plattformsystem (PDW):

DBCC FREEPROCCACHE [ ( COMPUTE | ALL ) ]
     [ WITH NO_INFOMSGS ]
[;]

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.

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 von den folgenden dynamischen Verwaltungsobjekten abgerufen werden:

sql_handle 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 eines Ressourcenpools für die 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.

COMPUTE

Alle Serverknoten werden aus dem Abfrageplancache gelöscht. Dies ist der Standardwert.

ALL

Alle Computerknoten und Steuerknoten werden aus dem Abfrageplancache gelöscht.

Hinweis

Ab SQL Server 2016 (13.x) ist ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE verfügbar, um den Prozedurcache (Plancache) für die aktuelle Datenbank zu löschen.

Hinweise

Verwenden Sie DBCC FREEPROCCACHE, um den Plancache sorgfältig zu leeren. Durch das Löschen des Prozedur-/Plancaches werden alle Pläne entfernt, und eingehende Abfrageausführungen werden mit einem neuen Plan kompiliert, statt dass alle zuvor zwischengespeicherten Pläne wieder verwendet werden.

Bei steigender Anzahl von Kompilierungen kann es zu einer plötzlichen, vorübergehenden Abnahme der Abfrageleistung kommen. Das SQL Server-Fehlerprotokoll enthält für jeden geleerten Cachespeicher im Plancache folgende Infomeldung:

SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

Diese Meldung wird alle fünf Minuten protokolliert, solange der Cache innerhalb dieses Zeitintervalls geleert wird.

Der Prozedurcache wird außerdem durch die folgenden Neukonfigurierungsvorgänge gelöscht:

  • access check cache bucket count
  • access check cache quota
  • clr enabled
  • cost threshold for parallelism
  • cross db ownership chaining
  • index create memory
  • max degree of parallelism
  • Max. Serverarbeitspeicher
  • max text repl size
  • max worker threads
  • Min. Arbeitsspeicher pro Abfrage
  • Min. Serverarbeitsspeicher
  • query governor cost limit
  • query wait
  • remote query timeout
  • user options

In Azure SQL-Datenbank wird DBCC FREEPROCCACHE auf die Datenbank-Engine-Instanz angewendet, die die aktuelle Datenbank oder den Pool für elastische Datenbanken hostet. Durch das Ausführen von DBCC FREEPROCCACHE in einer Benutzerdatenbank wird der Plancache für diese Datenbank gelöscht. Wenn sich die Datenbank im Pool für elastische Datenbanken befindet, wird auch der Plancache in allen anderen Datenbanken in diesem Pool für elastische Datenbanken gelöscht. Das Ausführen des Befehls in der master-Datenbank hat keine Auswirkungen auf andere Datenbanken auf demselben logischen Server. Durch die Ausführung dieses Befehls in einer Datenbank unter Verwendung des Dienstziels „Basic“, „S0“ oder „S1“ kann der Plancache in anderen Datenbanken gelöscht werden, die dieselben Dienstziele auf demselben logischen Server verwenden.

Resultsets

Wenn die WITH NO_INFOMSGS-Klausel nicht angegeben ist, gibt DBCC FREEPROCCACHE Folgendes zurück:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Berechtigungen

Gilt für: SQL Server, Analytics-Plattformsystem (PDW)

  • Erfordert die ALTER SERVER STATE-Berechtigung auf dem Server.

Gilt für: Azure SQL-Datenbank

  • Erfordert die Mitgliedschaft in der Serverrolle ##MS_ServerStateManager##.

Gilt für: Azure Synapse Analytics

  • Erfordert die Mitgliedschaft in der festen Serverrolle db_owner.

Hinweise zu Azure Synapse Analytics und Analytics Platform System (PDW)

Mehrere DBCC FREEPROCCACHE-Befehle können gleichzeitig ausgeführt werden.

In Azure Synapse Analytics oder Analytics-Plattformsystem (PDW) kann das Löschen des Plancaches eine vorübergehende Abnahme der Abfrageleistung verursachen, da eingehende Abfragen einen neuen Plan kompilieren, statt einen zuvor zwischengespeicherten Plan zu verwenden.

DBCC FREEPROCCACHE (COMPUTE) bewirkt nur, dass SQL Server Abfragen erneut kompiliert, wenn sie auf den Serverknoten ausgeführt werden. Der Befehl führt nicht dazu, dass Azure Synapse Analytics oder Analytics Platform System (PDW) den parallelen Abfrageplan kompilieren, der auf dem Steuerknoten generiert wird.

DBCC FREEPROCCACHE kann während der Ausführung abgebrochen werden.

Einschränkungen für Azure Synapse Analytics und Analytics Platform System (PDW)

DBCC FREEPROCCACHE kann nicht innerhalb einer Transaktion ausgeführt werden.

DBCC FREEPROCCACHE wird in EXPLAIN-Anweisungen nicht unterstützt.

Metadaten für Azure Synapse Analytics und Analytics-Plattformsystem (PDW)

Der Systemansicht sys.pdw_exec_requests wird eine neue Zeile hinzugefügt, wenn DBCC FREEPROCCACHE ausgeführt wird.

Beispiele: SQL Server

A. Löschen eines Abfrageplans aus dem 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 AdventureWorks2022;
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

Hier ist das Resultset.

plan_handle                                         text
--------------------------------------------------  -----------------------------
0x060006001ECA270EC0215D05000000000000000000000000  SELECT * FROM Person.Address;
  
(1 row(s) affected)
-- Remove the specific plan from the cache.
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);
GO

B. Löschen aller Pläne aus dem 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

Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)

D: Grundlegende DBCC FREEPROCCACHE-Syntax

Im folgende Beispiel werden alle vorhandenen Abfrageplancaches aus den Compute-Knoten entfernt. Obwohl der Kontext auf UserDbSales festgelegt ist, werden die Abfrageplancaches des Serverknotens für alle Datenbanken entfernt. Die WITH NO_INFOMSGS-Klausel verhindert, dass Informationsmeldungen in den Ergebnissen angezeigt werden.

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE) WITH NO_INFOMSGS;

Das folgende Beispiel ergibt dieselben Ergebnisse wie im vorherigen Beispiel, außer dass die Ergebnisse Informationsmeldungen enthalten.

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE);

Wenn Informationsmeldungen angefordert werden und die Ausführung erfolgreich ist, enthalten die Abfrageergebnisse eine Zeile pro Compute-Knoten.

E. Erteilen von Berechtigungen zum Ausführen von DBCC FREEPROCCACHE

Im folgenden Beispiel wird dem Benutzer David die Berechtigung zur Ausführung von DBCC FREEPROCCACHE erteilt.

GRANT ALTER SERVER STATE TO David;
GO

Weitere Informationen