FreeProcCache和FreeSystemCache之间的区别


12

当前,DBCC FREEPROCCACHE当我想在运行SQL查询之间将信息从缓冲池中擦除时,我正在运行。不过,我正在审查 Technet文章引用DBCC FREESYSTEMCACHE。什么FREESYSTEMCACHE擦除不会擦除FREEPROCCACHE

Answers:


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,您将无法在该详细级别清除所有上述内容。

来自BOL的 FREEPROCCACHE ==>

从计划缓存中删除所有元素,通过指定计划句柄或SQL句柄从计划缓存中删除特定计划,或删除与指定资源池关联的所有缓存条目。

因此,从本质上讲,您可能会认为它仅与计划缓存有关,能够从具有计划句柄和/或池名称的缓存中删除特定计划。

DBCC的乐趣FREEPROCCACHE是Glenn Berry的博客

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.