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 rubrique Conventions de la 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 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

Voir aussi

Référence

DBCC (Transact-SQL)

Concepts

Gouverneur de ressources