Ответы:
Какие кэши 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 - это блог Гленна Берри