DBCC FREESYSTEMCACHE (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

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

Transact-SQL 语法约定

语法

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

注意

若要查看 SQL Server 2014 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

( 'ALL' [ , pool_name ] )

  • ALL

    指定所有受支持的缓存。

  • pool_name

    指定资源调控器池缓存。 只释放与此池关联的条目。 若要列出可用池名称,请运行:

    SELECT name FROM sys.dm_resource_governor_resource_pools;
    

可使用此命令单独释放大多数(但非全部)缓存。

MARK_IN_USE_FOR_REMOVAL

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

NO_INFOMSGS

取消显示所有信息性消息。

备注

运行 DBCC FREESYSTEMCACHE 可清除 SQL Server 实例的计划缓存。 清除计划缓存将导致对所有即将到来的执行计划进行重新编译,并可能导致查询性能暂时性地突然降低。 对于计划缓存中每个已清除的缓存存储区,SQL Server 错误日志包含以下信息性消息:

SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

每隔五分钟,只要缓存在这段时间间隔内得到刷新,此消息就记录一次。

结果集

DBCC FREESYSTEMCACHE 返回:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

权限

需要对服务器的 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;

请参阅