DBCC FREEPROCCACHE (Transact-SQL)
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é.
Conventions de la syntaxe Transact-SQL
Syntaxe
DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]
Arguments
( { 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 est de type varbinary(64) et peut être obtenu à partir des objets de gestion dynamique suivants :sql_handle est le handle SQL du lot à effacer. sql_handle est de type varbinary(64) et peut être obtenu à partir des objets de gestion dynamique suivants :
pool_name est le nom d'un pool de ressources du gouverneur de ressources. pool_name est de type sysname et peut être obtenu en interrogeant la vue de gestion dynamique sys.dm_resource_governor_resource_pools.
Pour associer un groupe de charge de travail du gouverneur de ressources à un pool de ressources, interrogez la vue de gestion dynamique sys.dm_resource_governor_workload_groups. Pour plus d'informations sur le groupe de charge de travail pour une session, interrogez la vue de gestion dynamique sys.dm_exec_sessions.
WITH NO_INFOMSGS
Supprime tous les messages d'information.
Notes
Utilisez l'instruction DBCC FREEPROCCACHE pour effacer le cache du plan avec précaution. Le vidage du cache du plan entraîne par exemple la recompilation d'une procédure stockée au lieu de sa réutilisation à partir du cache. Cette opération peut entraîner une baisse temporaire et brutale des performances des requêtes. Pour chaque mémoire cache effacée du cache du plan, le journal des erreurs SQL Server contient le message d'information suivant : «SQL 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 ». Ce message est enregistré toutes les cinq minutes si le cache est vidé au cours de cet intervalle de temps.
Les opérations de reconfiguration suivantes effacent également le cache de procédures :
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
Jeux de résultats
Lorsque la clause WITH NO_INFOMSGS n'est pas spécifiée, l'instruction DBCC FREEPROCCACHE retourne le message :
« Exécution de DBCC terminée. Si DBCC vous a adressé des messages d'erreur, contactez l'administrateur système. »
Autorisations
Nécessite l'autorisation ALTER SERVER STATE sur le serveur.
Exemples
A.Effacement d'un plan de requête du cache du plan
L'exemple suivant efface un plan de requête du cache du plan en spécifiant le descripteur du plan de requête. 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. Les vues de gestion dynamique sys.dm_exec_cached_plans et sys.dm_exec_sql_text sont interrogées pour retourner le descripteur de plan de la requête. 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.
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.
plan_handle text
-------------------------------------------------- -----------------------------
0x060006001ECA270EC0215D05000000000000000000000000 SELECT * FROM Person.Address;
(1 row(s) affected)
-- Remove the specific plan from the cache.
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);
GO
B.Effacement de tous les plans du cache du plan
L'exemple suivant efface tous les éléments du cache du plan. La clause WITH NO_INFOMSGS est spécifiée pour empêcher l'affichage du message d'information.
DBCC FREEPROCCACHE WITH NO_INFOMSGS;
C.Effacement de toutes les entrées de cache associées à un pool de ressources
L'exemple suivant efface toutes les entrées de cache associées à un pool de ressources spécifié. La vue sys.dm_resource_governor_resource_pools est d'abord interrogée pour obtenir la valeur de pool_name.
SELECT * FROM sys.dm_resource_governor_resource_pools;
GO
DBCC FREEPROCCACHE ('default');
GO