Différence entre FreeProcCache et FreeSystemCache

12

Actuellement, je lance DBCC FREEPROCCACHElorsque je veux effacer les informations du pool de mémoire tampon entre les requêtes SQL en cours d'exécution. Cependant, je passais en revue cet article Technet faisant référence DBCC FREESYSTEMCACHE. Quels caches FREESYSTEMCACHEeffacent cela FREEPROCCACHE?

Sean Long
la source

Réponses:

25

Quels caches FREESYSTEMCACHE efface-t-il que FREEPROCCACHE ne fait pas?

Il existe de nombreux caches système disponibles dans SQL Server. Je fais référence à SQL 2008R2 (comme je l'ai testé dessus).

La requête ci-dessous renverra tous les caches disponibles:

--- ONLY for Educational purpose. Don't attempt to run on PROD !!

select 'DBCC freesystemcache ('+''''+name+''''+')'  from   sys.dm_os_memory_clerks group by name
-- 155 rows

par exemple, vous voulez effacer tous les caches que vous exécuterez

DBCC FREESYSTEMCACHE ('ALL')

pour que les caches spécifiques soient effacés, vous pouvez exécuter

DBCC FREESYSTEMCACHE ('userdatabase') -- cleans cache for specific user database
DBCC FREESYSTEMCACHE ('tempdb')  -- clears cache for tempdb
DBCC FREESYSTEMCACHE ('Temporary Tables & Table Variables') -- clears all the temp table and variables
.. and many more (see above 155 rows returned from sql server 2008R2)

En utilisant FREEPROCCACHE, vous ne pourrez pas effacer tout ce qui précède à ce niveau détaillé.

FREEPROCCACHE ==> de BOL

Supprime tous les éléments du cache de plan, supprime un plan spécifique du cache de plan en spécifiant un descripteur de plan ou un descripteur SQL, ou supprime toutes les entrées de cache associées à un pool de ressources spécifié.

Donc, essentiellement, vous pouvez le considérer comme uniquement lié au cache Plan avec la possibilité de supprimer des plans spécifiques du cache avec le descripteur de plan et / ou le nom du pool.

Fun With DBCC FREEPROCCACHE est un blog de Glenn Berry

Kin Shah
la source