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 分以内にフラッシュされる場合に限り、その間隔でログに記録されます。
結果セット
WITH NO_INFOMSGS 句が指定されていない場合は次のメッセージが表示されます。
"DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。"
権限
サーバーに対する ALTER SERVER STATE 権限が必要です。
例
A. プラン キャッシュから特定のクエリ プランを削除する
次の例では、クエリ プラン ハンドルを指定して、プラン キャッシュから特定のクエリ プランを削除します。まず、この例のクエリがプラン キャッシュに含まれるようにするために、クエリを実行します。次に、動的管理ビューの sys.dm_exec_cached_plans および sys.dm_exec_sql_text に対してクエリを実行し、このクエリのプラン ハンドルを取得します。その後、結果セットのプラン ハンドルの値を DBCC FREEPROCACHE ステートメントに挿入して、プラン キャッシュからそのプランのみを削除します。
USE AdventureWorks;
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 行処理されました)
-- 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
変更履歴
変更内容 |
---|
導入部のリソース プールに関する情報を修正し、リソース ガバナ プール名の情報を取得する方法の説明を「引数」のセクションに追加しました。 |
例 C を追加しました。 |