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

S’APPLIQUE À : ouiSQL Server nonAzure SQL Database ouiAzure SQL Data Warehouse ouiParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Supprime tous les éléments du cache du plan, supprime un plan spécifique du cache du plan en spécifiant un handle de plan ou un handle SQL, ou supprime toutes les entrées de cache associées à un pool de ressources spécifié.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.

Notes

DBCC FREEPROCCACHE n'efface pas les statistiques d'exécution pour les procédures stockées compilées en mode natif.DBCC FREEPROCCACHE does not clear the execution statistics for natively compiled stored procedures. Le cache de procédures ne contient pas d'informations relatives aux procédures stockées compilées en mode natif.The procedure cache does not contain information about natively compiled stored procedures. Toutes les statistiques d’exécution collectées à partir des exécutions de procédure s’affichent dans les vues de gestion dynamique de statistiques d’exécution : sys.dm_exec_procedure_stats (Transact-SQL) et 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).

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

Syntaxe de SQL Server :Syntax for SQL Server:

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

Syntaxe pour Azure SQL Data Warehouse et Parallel Data Warehouse :Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse:

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

ArgumentsArguments

( { plan_handle | sql_handle | pool_name } )( { plan_handle | sql_handle | pool_name } )
plan_handle identifie de façon unique un plan de requête pour un lot exécuté et dont le plan réside dans le cache du plan.plan_handle uniquely identifies a query plan for a batch that has executed and whose plan resides in the plan cache. plan_handle est de type varbinary(64) et peut être obtenu à partir des objets de gestion dynamique suivants :plan_handle is varbinary(64) and can be obtained from the following dynamic management objects:

sql_handle est le handle SQL du lot à effacer.sql_handle is the SQL handle of the batch to be cleared. sql_handle est de type varbinary(64) et peut être obtenu à partir des objets de gestion dynamique suivants :sql_handle is varbinary(64) and can be obtained from the following dynamic management objects:

pool_name est le nom d’un pool de ressources de Resource Governor.pool_name is the name of a Resource Governor resource pool. pool_name est de type sysname et peut être obtenu en interrogeant la vue de gestion dynamique 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.
Pour associer un groupe de charge de travail de Resource Governor à un pool de ressources, interrogez la vue de gestion dynamique 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. Pour plus d’informations sur le groupe de charge de travail pour une session, interrogez la vue de gestion dynamique 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
Supprime tous les messages d'information.Suppresses all informational messages.

COMPUTECOMPUTE
Vide le cache du plan de requête à partir de chaque nœud de calcul.Purge the query plan cache from each Compute node. Il s'agit de la valeur par défaut.This is the default value.

ALLALL
Vide le cache du plan de requête à partir de chaque nœud de calcul et du nœud de contrôle.Purge the query plan cache from each Compute node and from the Control node.

Notes

À compter de SQL Server 2016 (13.x)SQL Server 2016 (13.x), utilisez l’instruction ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE pour effacer le cache (du plan) de procédure pour la base de données dans l’étendue.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.

NotesRemarks

Utilisez l'instruction DBCC FREEPROCCACHE pour effacer le cache du plan avec précaution.Use DBCC FREEPROCCACHE to clear the plan cache carefully. L’effacement du cache (du plan) de procédure entraîne la suppression de tous les plans et la compilation d’un nouveau plan par les exécutions de requêtes entrantes, et non la réutilisation d’un plan mis en cache précédemment.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.

Cette opération peut entraîner une baisse temporaire et brutale des performances des requêtes comme le nombre de nouvelles compilations augmente.This can cause a sudden, temporary decrease in query performance as the number of new compilations increases. Pour chaque mémoire cache effacée dans le cache du plan, le journal des erreurs SQL ServerSQL Server contient le message d’information suivant : « SQL ServerSQL Server a rencontré %d occurrence(s) de vidages de mémoire cache pour la mémoire cache '%s' (partie du cache du plan) en raison d’opérations 'DBCC FREEPROCCACHE' ou 'DBCC FREESYSTEMCACHE' ».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." Ce message est enregistré toutes les cinq minutes si le cache est vidé au cours de cet intervalle de temps.This message is logged every five minutes as long as the cache is flushed within that time interval.

Les opérations de reconfiguration suivantes effacent également le cache de procédures :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

Jeux de résultatsResult Sets

Quand la clause WITH NO_INFOMSGS n’est pas spécifiée, l’instruction DBCC FREEPROCCACHE retourne : « Exécution de DBCC terminée.When the WITH NO_INFOMSGS clause is not specified, DBCC FREEPROCCACHE returns: "DBCC execution completed. Si DBCC vous a adressé des messages d'erreur, contactez l'administrateur système. »If DBCC printed error messages, contact your system administrator."

AutorisationsPermissions

S’applique à : SQL ServerSQL Server, Parallel Data WarehouseParallel Data WarehouseApplies to: SQL ServerSQL Server, Parallel Data WarehouseParallel Data Warehouse

  • Nécessite l'autorisation ALTER SERVER STATE sur le serveur.Requires ALTER SERVER STATE permission on the server.

S’applique à : SQL Data WarehouseSQL Data WarehouseApplies to: SQL Data WarehouseSQL Data Warehouse

  • Nécessite l'appartenance au rôle serveur fixe DB_OWNER.Requires membership in the DB_OWNER fixed server role.

Remarques d’ordre général pour SQL Data WarehouseSQL Data Warehouse et Parallel Data WarehouseParallel Data WarehouseGeneral Remarks for SQL Data WarehouseSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

Plusieurs commandes DBCC FREEPROCCACHE peuvent être exécutées simultanément.Multiple DBCC FREEPROCCACHE commands can be run concurrently. Dans SQL Data WarehouseSQL Data Warehouse ou Parallel Data WarehouseParallel Data Warehouse, l’effacement du cache du plan peut entraîner une baisse temporaire des performances des requêtes comme les requêtes entrantes compilent un nouveau plan au lieu de réutiliser un plan mis en cache précédemment.In SQL Data WarehouseSQL 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) contraint uniquement SQL ServerSQL Server à recompiler les requêtes quand elles sont exécutées sur les nœuds de calcul.DBCC FREEPROCCACHE (COMPUTE) only causes SQL ServerSQL Server to recompile queries when they are run on the Compute nodes. Ni SQL Data WarehouseSQL Data Warehouse ni Parallel Data WarehouseParallel Data Warehouse ne doivent recompiler le plan de requête parallèle qui est généré sur le nœud de contrôle.It does not cause SQL Data WarehouseSQL Data Warehouse or Parallel Data WarehouseParallel Data Warehouse to recompile the parallel query plan that is generated on the Control node. Il est possible d’annuler DBCC FREEPROCCACHE lors de l’exécution.DBCC FREEPROCCACHE can be cancelled during execution.

Limitations et restrictions pour SQL Data WarehouseSQL Data Warehouse et Parallel Data WarehouseParallel Data WarehouseLimitations and Restrictions for SQL Data WarehouseSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

Il n’est pas possible d’exécuter DBCC FREEPROCCACHE dans une transaction.DBCC FREEPROCCACHE can not run within a transaction. DBCC FREEPROCCACHE n’est pas pris en charge dans une instruction EXPLAIN.DBCC FREEPROCCACHE is not supported in an EXPLAIN statement.

Métadonnées pour SQL Data WarehouseSQL Data Warehouse et Parallel Data WarehouseParallel Data WarehouseMetadata for SQL Data WarehouseSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

Une nouvelle ligne est ajoutée à la vue système sys.pdw_exec_requests lors de l’exécution de DBCC FREEPROCCACHE.A new row is added to the sys.pdw_exec_requests system view when DBCC FREEPROCCACHE is run.

Exemples : SQL ServerSQL ServerExamples: SQL ServerSQL Server

A.A. Effacement d'un plan de requête du cache du planClearing a query plan from the plan cache

L'exemple suivant efface un plan de requête du cache du plan en spécifiant le descripteur du plan de requête.The following example clears a query plan from the plan cache by specifying the query plan handle. Pour vérifier que l'exemple de requête se trouve dans le cache du plan, la requête est d'abord exécutée.To ensure the example query is in the plan cache, the query is first executed. Les vues de gestion dynamique sys.dm_exec_cached_plans et sys.dm_exec_sql_text sont interrogées pour retourner le handle de plan de la requête.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.

Puis, la valeur du descripteur de plan extraite du jeu de résultats est insérée dans l'instruction DBCC FREEPROCACHE pour supprimer uniquement le plan du cache du plan.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  

Voici l'ensemble des résultats.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. Effacement de tous les plans du cache du planClearing all plans from the plan cache

L'exemple suivant efface tous les éléments du cache du plan.The following example clears all elements from the plan cache. La clause WITH NO_INFOMSGS est spécifiée pour empêcher l’affichage du message d’information.The WITH NO_INFOMSGS clause is specified to prevent the information message from being displayed.

DBCC FREEPROCCACHE WITH NO_INFOMSGS;  

C.C. Effacement de toutes les entrées de cache associées à un pool de ressourcesClearing all cache entries associated with a resource pool

L'exemple suivant efface toutes les entrées de cache associées à un pool de ressources spécifié.The following example clears all cache entries associated with a specified resource pool. La vue sys.dm_resource_governor_resource_pools est d’abord interrogée pour obtenir la valeur de 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  

Exemples : SQL Data WarehouseSQL Data Warehouse et Parallel Data WarehouseParallel Data WarehouseExamples: SQL Data WarehouseSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

D.D. Exemples de syntaxe de base DBCC FREEPROCCACHEDBCC FREEPROCCACHE Basic Syntax Examples

L’exemple suivant supprime tous les caches des plans de requête existants des nœuds de calcul.The following example removes all existing query plan caches from the Compute nodes. Même si le contexte est défini sur UserDbSales, les caches des plans de requête des nœuds de calcul pour toutes les bases de données seront supprimés.Although the context is set to UserDbSales, the Compute node query plan caches for all databases will be removed. La clause WITH NO_INFOMSGS empêche l’affichage des messages d’information dans les résultats.The WITH NO_INFOMSGS clause prevents informational messages from appearing in the results.

USE UserDbSales;  
DBCC FREEPROCCACHE (COMPUTE) WITH NO_INFOMSGS;

L’exemple suivant présente les mêmes résultats que l’exemple précédent, à ceci près que les messages d’information s’affichent dans les résultats.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);  

Quand les messages d’information sont demandés et que l’exécution est réussie, les résultats de requête occupent une ligne par nœud de calcul.When informational messages are requested and the execution is successful, the query results will have one line per Compute node.

E.E. Octroi de l’autorisation d’exécuter DBCC FREEPROCCACHEGranting Permission to run DBCC FREEPROCCACHE

L’exemple suivant donne à l’utilisateur connecté David l’autorisation d’exécuter DBCC FREEPROCCACHE.The following example gives the login David permission to run DBCC FREEPROCCACHE.

GRANT ALTER SERVER STATE TO David; 
GO

Voir aussiSee Also

DBCC (Transact-SQL)DBCC (Transact-SQL)
gouverneur de ressourcesResource Governor
ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL)ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL)