DBCC FREESYSTEMCACHE (Transact-SQL)

从所有缓存中释放所有未使用的缓存条目。SQL Server 数据库引擎会事先在后台清理未使用的缓存条目,以使内存可用于当前条目。但是,可以使用此命令从所有缓存中或者从指定的资源调控器池缓存中手动删除未使用的条目。

主题链接图标Transact-SQL 语法约定

语法

DBCC FREESYSTEMCACHE 
        ( 'ALL' [, pool_name ] ) 
    [WITH 
    { [ MARK_IN_USE_FOR_REMOVAL ] , [ NO_INFOMSGS ]  }
    ]

参数

  • ( 'ALL' [, pool_name ] )
    ALL 指定所有受支持的缓存。

    pool_name 指定资源调控器池缓存。只释放与此池关联的条目。

  • MARK_IN_USE_FOR_REMOVAL
    当不再使用当前使用的条目后,将它们分别从其各自所属的缓存中进行异步释放。当 DBCC FREESYSTEMCACHE WITH MARK_IN_USE_FOR_REMOVAL 执行后,缓存中新创建的条目不会受到影响。

  • NO_INFOMSGS
    禁止显示所有信息性消息。

结果集

DBCC FREESYSTEMCACHE 返回:

“DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。”

注释

执行 DBCC FREESYSTEMCACHE 将清除 SQL Server 实例的计划缓存。清除计划缓存将导致对所有后续执行计划进行重新编译,并可能导致查询性能暂时性地突然降低。对于计划缓存中每个已清除的缓存存储区,SQL Server 错误日志将包含以下信息性消息:“由于 'DBCC FREEPROCCACHE' 或 'DBCC FREESYSTEMCACHE' 操作,SQL Server 经历了 '%s' 缓存存储区(计划缓存的一部分)的 %d 次刷新。”只要每五分钟刷新一次缓存,此消息就将每五分钟记录一次。

权限

需要对服务器的 ALTER SERVER STATE 权限。

示例

A. 从资源调控器池缓存释放未使用的缓存条目

下面的示例说明如何清除专属于某个指定资源调控器资源池的缓存。

-- Clean all the caches with entries specific to the resource pool named "default".
DBCC FREESYSTEMCACHE ('ALL','default');

B. 当不再使用条目后,将它们分别从其各自所属的缓存中释放

下面的示例使用 MARK_IN_USE_FOR_REMOVAL 子句,在不再使用条目后将它们从所有当前缓存中释放。

DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;