DBCC FREESYSTEMCACHE (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

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

Transact-SQL 語法慣例

Syntax

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

注意

若要檢視 SQL Server 2014 與更早版本的 Transact-SQL 語法,請參閱舊版文件

引數

( 'ALL' [ , pool_name ] )

  • ALL

    指定所有支援的快取。

  • pool_name

    指定資源管理員集區快取。 僅會釋放與此集區相關的項目。 若要列出可用的集區名稱,請執行:

    SELECT name FROM sys.dm_resource_governor_resource_pools;
    

大部分 (但非全部) 的快取都可以使用此命令來個別釋放。

MARK_IN_USE_FOR_REMOVAL

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

NO_INFOMSGS

隱藏所有參考訊息。

備註

執行 DBCC FREESYSTEMCACHE 會清除 SQL Server 執行個體的計畫快取。 清除計畫快取會導致重新編譯所有未來執行計畫,且可能會導致查詢效能突然暫時降低。 針對計畫快取中每個已清除的快取存放區,SQL Server 錯誤記錄檔會包含下列參考訊息:

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.

只要在該時間間隔內快取發生排清,這個訊息就會每五分鐘記錄一次。

結果集

DBCC FREESYSTEMCACHE 會傳回:

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

權限

需要伺服器的 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;

另請參閱