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' 操作により、'%s' キャッシュストア (プラン キャッシュの一部) のキャッシュストア フラッシュを %d 個検出しました。" という情報メッセージが SQL Server エラー ログに記録されます。このメッセージは、5 分以内にキャッシュがフラッシュされる限り、5 分間隔でログに記録されます。
以下の再構成操作によってもプロシージャ キャッシュが消去されます。
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 の実行が完了しました。 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