DBCC FREEPROCCACHE (Transact-SQL)
從計畫快取移除所有元素;指定計畫控制代碼或 SQL 控制代碼,從計畫快取移除特定的計畫;或是移除與指定的資源集區相關聯的所有快取項目。
語法
DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]
引數
( { plan_handle | sql_handle | pool_name } )
plan_handle 會唯一識別批次的查詢計畫,該批次已經執行,且其計畫位於計畫快取中。 plan_handle 是 varbinary(64),並可從下列動態管理物件中取得:sql_handle 是要清除之批次的 SQL 控制代碼。 sql_handle 是 varbinary(64),並可從下列動態管理物件中取得:
pool_name 是「資源管理員」資源集區的名稱。 pool_name 是 sysname,而且可以藉由查詢 sys.dm_resource_governor_resource_pools 動態管理檢視來取得。
若要將資源管理員工作負載群組與資源集區產生關聯,請查詢 sys.dm_resource_governor_workload_groups 動態管理檢視。 如需有關工作階段之工作負載群組的詳細資訊,請查詢 sys.dm_exec_sessions 動態管理檢視。
WITH NO_INFOMSGS
抑制所有參考訊息。
備註
請利用 DBCC FREEPROCCACHE 小心清除計畫快取。 釋出計畫快取會導致例如重新編譯預存程序,而不是從快取中重複使用這個預存程序。 這可能會導致查詢效能突然暫時下降。 對於計畫快取中每一個清除的快取存放區而言,SQL Server 錯誤記錄檔會包含下列參考用訊息:"由於 'DBCC FREEPROCCACHE' 或 'DBCC FREESYSTEMCACHE' 作業,SQL Server 的 '%s' 快取存放區 (計畫快取的一部分) 發生 %d 次快取存放區排清。只要在該時間間隔內快取發生排清,這個訊息就會每五分鐘記錄一次。
下列重新設定選項也會清除程序快取:
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 server memory
max text repl size
max worker threads
min memory per query
min server memory
query governor cost limit
query wait
remote query timeout
user options
結果集
未指定 WITH NO_INFOMSGS 子句時,DBCC FREEPROCCACHE 會傳回:
「DBCC 的執行已經完成。 如果 DBCC 印出錯誤訊息,請連絡您的系統管理員」。
權限
需要伺服器的 ALTER SERVER STATE 權限。
範例
A.從計畫快取清除查詢計畫
下列範例會從計畫快取中指定查詢計畫控制代碼,藉以清除查詢計畫。 為確保範例查詢位於計畫快取中,會先執行查詢。 系統會查詢 sys.dm_exec_cached_plans 和 sys.dm_exec_sql_text 動態管理檢視以傳回查詢的計畫控制代碼。 然後會將結果集中的計畫控制代碼值插入到 DBCC FREEPROCACHE 陳述式中,就可以從計畫快取中僅移除該計畫。
USE AdventureWorks2012;
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 row(s) affected)
-- 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