Partage via


DBCC FREEPROCCACHE (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

Notes

DBCC FREEPROCCACHE n'efface pas les statistiques d'exécution pour les procédures stockées compilées en mode natif. Le cache de procédures ne contient pas d'informations relatives aux procédures stockées compilées en mode natif. 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).

Conventions de la syntaxe Transact-SQL

Syntaxe

Syntaxe pour SQL Server et Azure SQL Database :

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

Syntaxe pour Azure Synapse Analytics et Analytics Platform System (PDW) :

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

Notes

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez Versions antérieures de la documentation.

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 de Resource Governor. 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 de Resource Governor à 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.

COMPUTE

Vide le cache du plan de requête à partir de chaque nœud de calcul. Valeur par défaut.

ALL

Vide le cache du plan de requête à partir de chaque nœud de calcul et du nœud de contrôle.

Notes

À compter de SQL Server 2016 (13.x), vous pouvez utiliser l’instruction ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE pour effacer le cache (du plan) de procédure pour la base de données active.

Remarques

Utilisez DBCC FREEPROCCACHE pour effacer le cache de plans avec précaution. 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.

Cette opération peut entraîner une baisse temporaire et brutale des performances des requêtes comme le nombre de nouvelles compilations augmente. 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 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.

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

Dans Azure SQL Database, DBCC FREEPROCCACHE s’exécute sur l’instance du moteur de base de données qui héberge la base de données ou le pool élastique actifs. L’exécution de DBCC FREEPROCCACHE dans une base de données utilisateur efface le cache de plans associé à cette base de données. Si la base de données se trouve dans un pool élastique, cette exécution efface également le cache du plan dans toutes les autres bases de données de ce pool élastique. L’exécution de la commande dans la base de données master n’a aucun effet sur les autres bases de données situées sur le même serveur logique. L’exécution de cette commande dans une base de données ayant un objectif de service De base, S0 ou S1 peut effacer le cache du plan dans d’autres bases de données qui utilisent ces objectifs de service sur le même serveur logique.

Jeux de résultats

Lorsque la clause WITH NO_INFOMSGS n’est pas spécifiée, DBCC FREEPROCCACHE retourne :

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Autorisations

S’applique à : SQL Server, Analytics Platform System (PDW)

  • Requiert l'autorisation ALTER SERVER STATE sur le serveur.

S’applique à : Azure SQL Database

  • Requiert l’appartenance au rôle serveur ##MS_ServerStateManager##.

S’applique à : Azure Synapse Analytics

  • Requiert l'appartenance au rôle serveur fixe db_owner.

Remarques pour Azure Synapse Analytics et Analytics Platform System (PDW)

Plusieurs commandes DBCC FREEPROCCACHE peuvent être exécutées simultanément.

Dans Azure Synapse Analytics ou Analytics Platform System (PDW), 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.

DBCC FREEPROCCACHE (COMPUTE) contraint uniquement SQL Server à recompiler les requêtes qui sont exécutées sur les nœuds de calcul. Ni Azure Synapse Analytics ni Analytics Platform System (PDW) ne doivent recompiler le plan de requête parallèle qui est généré sur le nœud de contrôle.

DBCC FREEPROCCACHE peut être annulé pendant l’exécution.

Limitations et restrictions pour Azure Synapse Analytics et Analytics Platform System (PDW)

DBCC FREEPROCCACHE ne peut pas s’exécuter dans une transaction.

DBCC FREEPROCCACHE ne peut pas être utilisé dans une instruction EXPLAIN.

Métadonnées pour Azure Synapse Analytics et Analytics Platform System (PDW)

Une nouvelle ligne est ajoutée à la vue système sys.pdw_exec_requests quand DBCC FREEPROCCACHE est exécuté.

Exemples : SQL Server

R. Effacer 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 handle 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 AdventureWorks2022;
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 le jeu de résultats obtenu.

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

B. Effacer tous les plans du cache de plans

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

Exemples : Azure Synapse Analytics et Analytics Platform System (PDW)

D. Syntaxe de base de DBCC FREEPROCCACHE

L’exemple suivant supprime tous les caches des plans de requête existants des nœuds de calcul. Même si le contexte est défini sur UserDbSales, les caches des plans de requête seront supprimés sur les nœuds de calcul pour toutes les bases de données. La clause WITH NO_INFOMSGS empêche l’affichage des messages d’information dans les résultats.

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.

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.

E. Accorder l’autorisation d’exécuter DBCC FREEPROCCACHE

L’exemple suivant donne à l’utilisateur connecté David l’autorisation d’exécuter DBCC FREEPROCCACHE.

GRANT ALTER SERVER STATE TO David;
GO

Voir aussi