DBCC FREEPROCCACHE (Transact-SQL)

從計畫快取移除所有元素;指定計畫控制代碼或 SQL 控制代碼,從計畫快取移除特定的計畫;或是移除與指定的資源集區相關聯的所有快取項目。

主題連結圖示Transact-SQL 語法慣例

語法

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

引數

備註

請利用 DBCC FREEPROCCACHE 小心清除計畫快取。釋出計畫快取會導致例如重新編譯預存程序,而不是從快取中重複使用這個預存程序。這可能會導致查詢效能突然暫時下降。針對每次清除計畫快取的快取存放區,SQL Server 錯誤記錄檔會包含下列參考訊息:「由於 'DBCC FREEPROCCACHE' 或 'DBCC FREESYSTEMCACHE' 作業,SQL Server 的 '%s' 快取存放區 (計畫快取的一部分) 發生 %d 次快取存放區排清。」只要快取發生排清,這個訊息就會每五分鐘記錄一次。

結果集

未指定 WITH NO_INFOMSGS 子句時,DBCC FREEPROCCACHE 會傳回:

「DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請連絡您的系統管理員」。

權限

需要伺服器的 ALTER SERVER STATE 權限。

範例

A. 從計畫快取清除查詢計畫

下列範例會從計畫快取中指定查詢計畫控制代碼,藉以清除查詢計畫。為確保範例查詢位於計畫快取中,會先執行查詢。系統會查詢 sys.dm_exec_cached_plans 和 sys.dm_exec_sql_text 動態管理檢視以傳回查詢的計畫控制代碼。然後會將結果集中的計畫控制代碼值插入到 DBCC FREEPROCACHE 陳述式中,就可以從計畫快取中僅移除該計畫。

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

以下為結果集:

plan_handle                                         text

--------------------------------------------------  -----------------------------

0x060006001ECA270EC0215D05000000000000000000000000  SELECT * FROM Person.Address;

(1 個資料列受到影響)

-- Remove the specific plan from the cache.
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);
GO

B. 從計畫快取清除所有計畫

下列範例會從計畫快取中清除所有元素。如果指定 WITH NO_INFOMSGS 子句,可防止資訊訊息顯示出來。

DBCC FREEPROCCACHE WITH NO_INFOMSGS;

C. 清除與資源集區有關聯的所有快取項目

下列範例會清除與指定之資源集區有關聯的所有快取項目。先查詢 sys.dm_resource_governor_resource_pools 檢視表,以取得 pool_name 的值。

SELECT * FROM sys.dm_resource_governor_resource_pools;
GO
DBCC FREEPROCCACHE (default);
GO

變更記錄

更新的內容

已更正簡介中的資源集區資訊,並在「引數」一節中新增有關取得資源管理員集區名稱資訊之方式的資訊。

已新增範例 C。