次の方法で共有


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 分以内にキャッシュがフラッシュされる限り、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

関連項目

参照

DBCC (Transact-SQL)

概念

リソース ガバナー