Разница между FreeProcCache и FreeSystemCache

12

В настоящее время я запускаю, DBCC FREEPROCCACHEкогда хочу стереть информацию из пула буферов между выполнением SQL-запросов. Тем не менее, я рецензировал эту статью Technet со ссылкой DBCC FREESYSTEMCACHE. Какие кеши FREESYSTEMCACHEстирает, FREEPROCCACHEа что нет?

Шон Лонг
источник

Ответы:

25

Какие кэши FREESYSTEMCACHE стирает, а FREEPROCCACHE - нет?

В SQL Server доступно много системных кэшей. Я имею в виду SQL 2008R2 (как я тестировал на нем).

Ниже запрос вернет все доступные кеши:

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

так, например, вы хотите очистить все кэши, которые вы будете запускать

DBCC FREESYSTEMCACHE ('ALL')

для очистки определенных кешей вы можете запустить

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)

Используя FREEPROCCACHE, вы не сможете очистить все вышеупомянутое на этом подробном уровне.

FREEPROCCACHE ==> от BOL

Удаляет все элементы из кэша плана, удаляет конкретный план из кэша плана, указывая дескриптор плана или дескриптор SQL, или удаляет все записи кэша, связанные с указанным пулом ресурсов.

По сути, вы можете подумать, что это связано только с кэшем плана с возможностью удаления определенных планов из кэша с помощью дескриптора плана или имени пула.

Веселье с DBCC FREEPROCCACHE - это блог Гленна Берри

Кин Шах
источник