DBCC FREEPROCCACHE (Transact-SQL)DBCC FREEPROCCACHE (Transact-SQL)

適用対象: ○SQL Server XAzure SQL Database ○Azure SQL Data Warehouse ○Parallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

プラン キャッシュからすべての要素を削除するか、プラン ハンドルまたは SQL ハンドルを指定して特定のプランを削除するか、指定したリソース プールに関連付けられたすべてのキャッシュ エントリを削除します。Removes all elements from the plan cache, removes a specific plan from the plan cache by specifying a plan handle or SQL handle, or removes all cache entries associated with a specified resource pool.

注意

DBCC FREEPROCCACHE では、ネイティブ コンパイル ストアド プロシージャの実行統計は消去されません。DBCC FREEPROCCACHE does not clear the execution statistics for natively compiled stored procedures. プロシージャ キャッシュには、ネイティブ コンパイル ストアド プロシージャに関する情報は含まれていません。The procedure cache does not contain information about natively compiled stored procedures. プロシージャの実行から収集された実行統計は、実行統計の DMV に表示されます。「sys.dm_exec_procedure_stats (Transact-SQL)」と「sys.dm_exec_query_plan (Transact-SQL)」を参照してください。Any execution statistics collected from procedure executions will appear in the execution statistics DMVs: sys.dm_exec_procedure_stats (Transact-SQL) and sys.dm_exec_query_plan (Transact-SQL).

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

SQL Server の構文:Syntax for SQL Server:

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

Azure SQL Data Warehouse と Parallel Data Warehouse の構文:Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse:

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

引数Arguments

( { plan_handle | sql_handle | pool_name } )( { plan_handle | sql_handle | pool_name } )
plan_handle は、既に実行されていて、そのプランがプラン キャッシュに格納されているバッチのクエリ プランを一意に識別します。plan_handle uniquely identifies a query plan for a batch that has executed and whose plan resides in the plan cache. plan_handlevarbinary(64) 型であり、次の動的管理オブジェクトから取得できます。plan_handle is varbinary(64) and can be obtained from the following dynamic management objects:

sql_handle は、削除するバッチの SQL ハンドルです。sql_handle is the SQL handle of the batch to be cleared. sql_handlevarbinary(64) 型であり、次の動的管理オブジェクトから取得できます。sql_handle is varbinary(64) and can be obtained from the following dynamic management objects:

pool_name は、Resource Governor リソース共有元の名前ですpool_name is the name of a Resource Governor resource pool. pool_namesysname 型であり、sys.dm_resource_governor_resource_pools 動的管理ビューに対してクエリを実行して取得できます。pool_name is sysname and can be obtained by querying the sys.dm_resource_governor_resource_pools dynamic management view.
Resource Governor ワークロード グループをリソース共有元に関連付けるには、sys.dm_resource_governor_workload_groups 動的管理ビューに対してクエリを実行します。To associate a Resource Governor workload group with a resource pool, query the sys.dm_resource_governor_workload_groups dynamic management view. セッションのワークロード グループの情報を表示するには、sys.dm_exec_sessions 動的管理ビューに対してクエリを実行します。For information about the workload group for a session, query the sys.dm_exec_sessions dynamic management view.

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

COMPUTECOMPUTE
各コンピューティング ノードからクエリ プラン キャッシュを削除します。Purge the query plan cache from each Compute node. これが既定値です。This is the default value.

ALLALL
各計算ノードと各制御ノードからクエリ プラン キャッシュを消去します。Purge the query plan cache from each Compute node and from the Control node.

注意

SQL Server 2016 (13.x)SQL Server 2016 (13.x) 以降は、ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE を使用してスコープ内のデータベースのプロシージャ (プラン) キャッシュをクリアします。Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x), the ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE to clear the procedure (plan) cache for the database in scope.

RemarksRemarks

DBCC FREEPROCCACHE を使用してプラン キャッシュをクリアする際には注意が必要です。Use DBCC FREEPROCCACHE to clear the plan cache carefully. プロシージャ (プラン) キャッシュをクリアすると、すべてのプランが削除されます。その後にクエリを実行すると、以前にキャッシュされたプランは再利用されず、新しいプランがコンパイルされます。Clearing the procedure (plan) cache causes all plans to be evicted, and incoming query executions will compile a new plan, instead of reusing any previously cached plan.

そのため、新しいコンパイルの数が増えると、クエリのパフォーマンスが突然一時的に低下する可能性があります。This can cause a sudden, temporary decrease in query performance as the number of new compilations increases. プラン キャッシュ内のキャッシュストアがクリアされるたびに、"SQL ServerSQL Server は、'DBCC FREEPROCCACHE' 操作または 'DBCC FREESYSTEMCACHE' 操作により、'%s' キャッシュストア (プラン キャッシュの一部) のキャッシュストア フラッシュを %d 個検出しました。" という情報メッセージが SQL ServerSQL Server エラー ログに記録されます。For each cleared cachestore in the plan cache, the SQL ServerSQL Server error log will contain the following informational message: " SQL ServerSQL 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 分間隔でログに記録されます。This message is logged every five minutes as long as the cache is flushed within that time interval.

次の再構成操作でもプロシージャ キャッシュはクリアされます。The following reconfigure operations also clear the procedure cache:

  • access check cache bucket countaccess check cache bucket count
  • access check cache quotaaccess check cache quota
  • clr enabledclr enabled
  • cost threshold for parallelismcost threshold for parallelism
  • cross db ownership chainingcross db ownership chaining
  • index create memoryindex create memory
  • max degree of parallelismmax degree of parallelism
  • max server memorymax server memory
  • max text repl sizemax text repl size
  • max worker threadsmax worker threads
  • min memory per querymin memory per query
  • min server memorymin server memory
  • query governor cost limitquery governor cost limit
  • query waitquery wait
  • remote query timeoutremote query timeout
  • user optionsuser options

結果セットResult Sets

WITH NO_INFOMSGS 句が指定されていない場合は、DBCC FREEPROCCACHE により次が返されます。"DBCC の実行が完了しました。When the WITH NO_INFOMSGS clause is not specified, DBCC FREEPROCCACHE returns: "DBCC execution completed. DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。"If DBCC printed error messages, contact your system administrator."

アクセス許可Permissions

適用対象: SQL ServerSQL ServerParallel Data WarehouseParallel Data WarehouseApplies to: SQL ServerSQL Server, Parallel Data WarehouseParallel Data Warehouse

  • サーバーに対する ALTER SERVER STATE 権限が必要です。Requires ALTER SERVER STATE permission on the server.

適用対象: SQL データ ウェアハウスSQL Data WarehouseApplies to: SQL データ ウェアハウスSQL Data Warehouse

  • DB_OWNER 固定サーバー ロールのメンバーシップが必要です。Requires membership in the DB_OWNER fixed server role.

SQL データ ウェアハウスSQL Data WarehouseParallel Data WarehouseParallel Data Warehouse に関する全般的な解説General Remarks for SQL データ ウェアハウスSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

複数の DBCC FREEPROCCACHE コマンドを同時に実行することができます。Multiple DBCC FREEPROCCACHE commands can be run concurrently. SQL データ ウェアハウスSQL Data Warehouse または Parallel Data WarehouseParallel Data Warehouse では、プラン キャッシュをクリアすると、以前にキャッシュされたプランが再利用されず、クエリの実行で新しいプランがコンパイルされるため、、クエリのパフォーマンスが一時的に低下する可能性があります。In SQL データ ウェアハウスSQL Data Warehouse or Parallel Data WarehouseParallel Data Warehouse, clearing the plan cache can cause a temporary decrease in query performance as incoming queries compile a new plan, instead of reusing any previously cached plan.

計算ノードで DBCC FREEPROCCACHE (COMPUTE) を実行する場合にのみ、SQL ServerSQL Server でクエリが再コンパイルされます。DBCC FREEPROCCACHE (COMPUTE) only causes SQL ServerSQL Server to recompile queries when they are run on the Compute nodes. SQL データ ウェアハウスSQL Data Warehouse または Parallel Data WarehouseParallel Data Warehouse の場合、制御ノードで生成される並列クエリ プランの再コンパイルは実行されません。It does not cause SQL データ ウェアハウスSQL Data Warehouse or Parallel Data WarehouseParallel Data Warehouse to recompile the parallel query plan that is generated on the Control node. 実行中に DBCC FREEPROCCACHE をキャンセルできます。DBCC FREEPROCCACHE can be cancelled during execution.

SQL データ ウェアハウスSQL Data Warehouse および Parallel Data WarehouseParallel Data Warehouse の制限事項と制約事項Limitations and Restrictions for SQL データ ウェアハウスSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

DBCC FREEPROCCACHE はトランザクション内で実行できません。DBCC FREEPROCCACHE can not run within a transaction. DBCC FREEPROCCACHE は EXPLAIN ステートメント内でサポートされていません。DBCC FREEPROCCACHE is not supported in an EXPLAIN statement.

SQL データ ウェアハウスSQL Data Warehouse および Parallel Data WarehouseParallel Data Warehouse のメタデータMetadata for SQL データ ウェアハウスSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

DBCC FREEPROCCACHE を実行すると、新しい行が sys.pdw_exec_requests システム ビューに追加されます。A new row is added to the sys.pdw_exec_requests system view when DBCC FREEPROCCACHE is run.

例: SQL ServerSQL ServerExamples: SQL ServerSQL Server

A.A. プラン キャッシュから特定のクエリ プランを削除するClearing a query plan from the plan cache

次の例では、クエリ プラン ハンドルを指定して、プラン キャッシュから特定のクエリ プランを削除します。The following example clears a query plan from the plan cache by specifying the query plan handle. まず、この例のクエリがプラン キャッシュに含まれるようにするために、クエリを実行します。To ensure the example query is in the plan cache, the query is first executed. 次に、動的管理ビューの sys.dm_exec_cached_plans および sys.dm_exec_sql_text に対してクエリを実行し、このクエリのプラン ハンドルを取得します。The sys.dm_exec_cached_plans and sys.dm_exec_sql_text dynamic management views are queried to return the plan handle for the query.

その後、結果セットのプラン ハンドルの値を DBCC FREEPROCACHE ステートメントに挿入して、プラン キャッシュからそのプランのみを削除します。The plan handle value from the result set is then inserted into the DBCC FREEPROCACHE statement to remove only that plan from the plan cache.

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  

以下に結果セットを示します。Here is the result set.

plan_handle                                         text  
--------------------------------------------------  -----------------------------  
0x060006001ECA270EC0215D05000000000000000000000000  SELECT * FROM Person.Address;  
  
(1 row(s) affected)
-- Remove the specific plan from the cache.  
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);  
GO  

B.B. プラン キャッシュからすべてのプランを削除するClearing all plans from the plan cache

次の例では、プラン キャッシュからすべての要素を削除します。The following example clears all elements from the plan cache. WITH NO_INFOMSGS句を指定して、情報メッセージが表示されないようにしています。The WITH NO_INFOMSGS clause is specified to prevent the information message from being displayed.

DBCC FREEPROCCACHE WITH NO_INFOMSGS;  

C.C. リソース プールに関連付けられたすべてのキャッシュ エントリを削除するClearing all cache entries associated with a resource pool

次の例では、指定したリソース プールに関連付けられているすべてのキャッシュ エントリを削除します。The following example clears all cache entries associated with a specified resource pool. 最初に、sys.dm_resource_governor_resource_pools ビューに対してクエリを実行し、pool_name の値を取得します。The sys.dm_resource_governor_resource_pools view is first queried to obtain the value for pool_name.

SELECT * FROM sys.dm_resource_governor_resource_pools;  
GO  
DBCC FREEPROCCACHE ('default');  
GO  

例: SQL データ ウェアハウスSQL Data Warehouse および Parallel Data WarehouseParallel Data WarehouseExamples: SQL データ ウェアハウスSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

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

次の例では、コンピューティング ノードからすべての既存のクエリ プラン キャッシュを削除します。The following example removes all existing query plan caches from the Compute nodes. コンテキストを UserDbSales に設定すると、すべてのデータベースのコンピューティング ノードのクエリ プラン キャッシュが削除されます。Although the context is set to UserDbSales, the Compute node query plan caches for all databases will be removed. WITH NO_INFOMSGS 句は、情報メッセージが結果に表示されないようにします。The WITH NO_INFOMSGS clause prevents informational messages from appearing in the results.

USE UserDbSales;  
DBCC FREEPROCCACHE (COMPUTE) WITH NO_INFOMSGS;

次の例では、情報メッセージが結果に表示されることを除き、前の例と同じ結果が表示されます。The following example has the same results as the previous example, except that informational messages will show in the results.

USE UserDbSales;  
DBCC FREEPROCCACHE (COMPUTE);  

情報メッセージが要求されて実行が成功すると、クエリの結果にはコンピューティング ノードごとに 1 行が含まれます。When informational messages are requested and the execution is successful, the query results will have one line per Compute node.

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

次の例では、ログイン David に DBCC FREEPROCCACHE を実行するアクセス許可を付与します。The following example gives the login David permission to run DBCC FREEPROCCACHE.

GRANT ALTER SERVER STATE TO David; 
GO

参照See Also

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