FreeProcCache 和 FreeSystemCache 的区别

Sea*_*ong 14 sql-server cache

目前,DBCC FREEPROCCACHE当我想在运行 SQL 查询之间从缓冲池中清除信息时,我会运行。但是,我正在查看这篇Technet 文章,其中引用了DBCC FREESYSTEMCACHE. 哪些缓存会FREESYSTEMCACHE擦除而FREEPROCCACHE不会?

Kin*_*hah 27

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
Run Code Online (Sandbox Code Playgroud)

所以例如你想清除你将运行的所有缓存

DBCC FREESYSTEMCACHE ('ALL')
Run Code Online (Sandbox Code Playgroud)

对于要清除的特定缓存,您可以运行

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)
Run Code Online (Sandbox Code Playgroud)

使用 FREEPROCCACHE,您将无法在该详细级别清除上述所有内容。

FREEPROCCACHE ==> 来自BOL

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

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

Fun with DBCC FREEPROCCACHE是 Glenn Berry 的博客