Partager via


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é.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

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

Arguments

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 dans le cache de 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.

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 une 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 AdventureWorks;
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 ligne(s) affectée(s))

-- 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

Historique des modifications

Mise à jour du contenu

Correction des informations relatives au pool de ressources dans l'introduction et ajout d'informations dans la section Arguments sur les façons d'obtenir des informations relatives au nom du pool du gouverneur de ressources.

Ajout de l'exemple C.