DBCC FREESYSTEMCACHE (Transact-SQL)
適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
キャッシュ全体から未使用のすべてのキャッシュ エントリを解放します。 SQL Server データベース エンジンでは、未使用のキャッシュ エントリをバックグラウンドで事前にクリーンアップし、メモリを現在のエントリで使用できるようにします。 ただし、このコマンドを使用できるのは、各キャッシュまたは指定したリソース ガバナー プール キャッシュから未使用のキャッシュ エントリを手動で削除する場合です。
構文
DBCC FREESYSTEMCACHE
( 'ALL' [ , pool_name ] )
[ WITH
{ [ MARK_IN_USE_FOR_REMOVAL ] , [ NO_INFOMSGS ] }
]
Note
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.
このメッセージは、5 分以内にキャッシュがフラッシュされる限り、5 分間隔でログに記録されます。
結果セット
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;