DBCC FREEPROCCACHE (Transact-SQL)

適用対象:yesSQL Server (サポートされているすべてのバージョン) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

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

注意

DBCC FREEPROCCACHE では、ネイティブ コンパイル ストアド プロシージャの実行統計は消去されません。 プロシージャ キャッシュには、ネイティブ コンパイル ストアド プロシージャに関する情報は含まれていません。 プロシージャの実行から収集された実行統計は、実行統計の DMV に表示されます。「sys.dm_exec_procedure_stats (Transact-SQL)」と「sys.dm_exec_query_plan (Transact-SQL)」を参照してください。

Topic link iconTransact-SQL 構文表記規則

構文

SQL Server の構文:

DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]  

Azure Synapse Analytics および Analytics Platform System (PDW) の構文:

DBCC FREEPROCCACHE [ ( COMPUTE | ALL ) ] 
     [ WITH NO_INFOMSGS ]   
[;]  

Note

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

( { plan_handle | sql_handle | pool_name } )
plan_handle は、既に実行されていて、そのプランがプラン キャッシュに格納されているバッチのクエリ プランを一意に識別します。 plan_handlevarbinary(64) 型であり、次の動的管理オブジェクトから取得できます。

sql_handle は、削除するバッチの SQL ハンドルです。 sql_handlevarbinary(64) 型であり、次の動的管理オブジェクトから取得できます。

pool_name は、Resource Governor リソース共有元の名前です pool_namesysname 型であり、sys.dm_resource_governor_resource_pools 動的管理ビューに対してクエリを実行して取得できます。
Resource Governor ワークロード グループをリソース共有元に関連付けるには、sys.dm_resource_governor_workload_groups 動的管理ビューに対してクエリを実行します。 セッションのワークロード グループの情報を表示するには、sys.dm_exec_sessions 動的管理ビューに対してクエリを実行します。

WITH NO_INFOMSGS
すべての情報メッセージを表示しないようにします。

COMPUTE
各コンピューティング ノードからクエリ プラン キャッシュを削除します。 これが既定値です。

ALL
各計算ノードと各制御ノードからクエリ プラン キャッシュを消去します。

Note

SQL Server 2016 (13.x) 以降は、ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE を使用してスコープ内のデータベースのプロシージャ (プラン) キャッシュをクリアします。

注釈

DBCC FREEPROCCACHE を使用してプラン キャッシュをクリアする際には注意が必要です。 プロシージャ (プラン) キャッシュをクリアすると、すべてのプランが削除されます。その後にクエリを実行すると、以前にキャッシュされたプランは再利用されず、新しいプランがコンパイルされます。

そのため、新しいコンパイルの数が増えると、クエリのパフォーマンスが突然一時的に低下する可能性があります。 プラン キャッシュ内のキャッシュストアが消去されるたびに、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 分間隔でログに記録されます。

次の再構成操作でもプロシージャ キャッシュはクリアされます。

  • 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 がエラー メッセージを出力した場合は、システム管理者に相談してください。"

アクセス許可

適用対象: SQL Server、Analytics Platform System (PDW)

  • サーバーに対する ALTER SERVER STATE 権限が必要です。

適用対象: Azure Synapse Analytics

  • DB_OWNER 固定サーバー ロールのメンバーシップが必要です。

Azure Synapse Analytics と Analytics Platform System (PDW) に関する全般的な解説

複数の DBCC FREEPROCCACHE コマンドを同時に実行することができます。 Azure Synapse Analytics または Analytics Platform System (PDW) では、プラン キャッシュをクリアすると、以前にキャッシュされたプランが再利用されず、クエリの実行で新しいプランがコンパイルされるため、、クエリのパフォーマンスが一時的に低下する可能性があります。

計算ノードで DBCC FREEPROCCACHE (COMPUTE) を実行する場合にのみ、SQL Server でクエリが再コンパイルされます。 Azure Synapse Analytics または Analytics Platform System (PDW) の場合、制御ノードで生成される並列クエリ プランの再コンパイルは実行されません。 実行中に DBCC FREEPROCCACHE をキャンセルできます。

Azure Synapse Analytics および Analytics Platform System (PDW) の制限事項と制約事項

DBCC FREEPROCCACHE はトランザクション内で実行できません。 DBCC FREEPROCCACHE は EXPLAIN ステートメント内でサポートされていません。

Azure Synapse Analytics および Analytics Platform System (PDW) のメタデータ

DBCC FREEPROCCACHE を実行すると、新しい行が sys.pdw_exec_requests システム ビューに追加されます。

例: SQL Server

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  

例: Azure Synapse Analytics、Analytics Platform System (PDW)

D. DBCC FREEPROCCACHE の基本的な構文の例

次の例では、コンピューティング ノードからすべての既存のクエリ プラン キャッシュを削除します。 コンテキストを UserDbSales に設定すると、すべてのデータベースのコンピューティング ノードのクエリ プラン キャッシュが削除されます。 WITH NO_INFOMSGS 句は、情報メッセージが結果に表示されないようにします。

USE UserDbSales;  
DBCC FREEPROCCACHE (COMPUTE) WITH NO_INFOMSGS;

次の例では、情報メッセージが結果に表示されることを除き、前の例と同じ結果が表示されます。

USE UserDbSales;  
DBCC FREEPROCCACHE (COMPUTE);  

情報メッセージが要求されて実行が成功すると、クエリの結果にはコンピューティング ノードごとに 1 行が含まれます。

E. DBCC FREEPROCCACHE を実行する権限を許可します。

次の例では、ログイン David に DBCC FREEPROCCACHE を実行するアクセス許可を付与します。

GRANT ALTER SERVER STATE TO David; 
GO

参照

DBCC (Transact-SQL)
リソース ガバナー
ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL)