DBCC FREESYSTEMCACHE (Transact-SQL)

釋出所有快取中所有未使用的快取項目。SQL Server Database Engine 會主動在背景清除未使用的快取項目,讓記憶體存放目前的項目。不過,您可以使用這個命令,以手動方式從所有快取或是指定的資源管理員集區快取中移除未使用的項目。

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

語法

DBCC FREESYSTEMCACHE 
        ( 'ALL' [, pool_name ] ) 
    [WITH 
    { [ MARK_IN_USE_FOR_REMOVAL ] , [ NO_INFOMSGS ]  }
    ]

引數

  • ( 'ALL' [, pool_name ] )
    ALL 會指定所有支援的快取。

    pool_name 會指定資源管理員集區快取。只有與此集區有關的項目才會被釋放。

  • MARK_IN_USE_FOR_REMOVAL
    等目前所用的項目不用之後,分別從其對應的快取中,以非同步的方式釋出這些項目。在 DBCC FREESYSTEMCACHE WITH MARK_IN_USE_FOR_REMOVAL 執行之後,於快取中建立的新項目皆不受影響。

  • NO_INFOMSGS
    抑制所有參考訊息。

結果集

DBCC FREESYSTEMCACHE 會傳回:

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

備註

執行 DBCC FREESYSTEMCACHE 會清除 SQL Server 執行個體的計畫快取。清除計畫快取會導致重新編譯所有後續執行計畫,而且可能會導致查詢效能突然暫時下降。對於計畫快取中每一個清除的快取存放區而言,SQL Server 錯誤記錄檔將會包含下列參考用訊息:「由於 'DBCC FREEPROCCACHE' 或 'DBCC FREESYSTEMCACHE' 作業,SQL Server 的 '%s' 快取存放區 (計畫快取的一部分) 發生 %d 次快取存放區排清。」只要快取發生排清,這個訊息就會每五分鐘記錄一次。

權限

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

範例

A. 從資源管理員集區快取釋放未使用的快取項目

下列範例將說明如何清除指定之資源管理員資源集區所專用的快取。

-- Clean all the caches with entries specific to the resource pool named "default".
DBCC FREESYSTEMCACHE ('ALL','default');

B. 等項目不用之後,分別從其對應的快取中釋出這些項目

下列範例會使用 MARK_IN_USE_FOR_REMOVAL 子句,當項目不再使用之後,就從目前所有的快取中釋放這些項目。

DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;