DBCC FREEPROCCACHE (Transact-SQL)

プラン キャッシュからすべての要素を削除するか、プラン ハンドルまたは SQL ハンドルを指定して特定のプランを削除するか、指定したリソース プールに関連付けられたすべてのキャッシュ エントリを削除します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ 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 AdventureWorks2008R2;
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