sp_filestream_force_garbage_collection (Transact-SQL)

强制运行 FILESTREAM 垃圾回收器,从而删除任何不需要的 FILESTREAM 文件。

在垃圾回收器清除 FILESTREAM 容器中的所有删除文件后,才能删除该容器。 FILESTREAM 垃圾回收器是自动运行的。 不过,如果您需要在运行垃圾回收器之前删除容器,则可以使用 sp_filestream_force_garbage_collection 手动运行垃圾回收器。

适用范围:SQL Server(SQL Server 2012 到当前版本)。

语法

sp_filestream_force_garbage_collection [ @dbname = ]  'database_name'  , @filename = 'logical_file_name' ]

参数

  • @dbname = database_name**'**
    指示要运行垃圾回收器的数据库的名称。

    备注

    dbname 的数据类型为 sysname。如果未指定,则假定为当前数据库。

  • @filename = logical_file_name
    指定要运行垃圾回收器的 FILESTREAM 容器的逻辑名称。 @filename 是可选的。 如果未指定逻辑文件名,垃圾回收器将清除指定数据库中的所有 FILESTREAM 容器。

返回代码值

说明

0

操作成功

1

操作失败

结果集

说明

file_name

指示 FILESTREAM 容器名称

num_collected_items

指示此容器中已回收(删除)的 FILESTREAM 项目(文件/目录)数。

num_marked_for_collection_items

指示此容器中已标记为回收(删除)的 FILESTREAM 项目(文件/目录)数。 尚未删除这些项目,但它们符合在后面的垃圾回收阶段将其删除的条件。

num_unprocessed_items

指示此 FILESTREAM 容器中符合条件但未进行垃圾回收处理的 FILESTREAM 项目(文件或目录)数。

可能由于各种原因而未处理项目,其中包括:

  • 由于尚未执行日志备份或检查点操作,需要暂时锁定文件。

  • 文件处于 FULL 或 BULK_LOGGED 恢复模式。

  • 有长时间运行的活动事务。

  • 尚未运行复制日志读取器作业。有关详细信息,请参阅 SQL Server 2008 中的 FILESTREAM 存储白皮书。

last_collected_xact_seqno

返回最后一个相应的日志序列号 (LSN),已垃圾回收指定 FILESTREAM 容器中小于该编号的文件。

注释

在请求的数据库(和 FILESTREAM 容器)上显式运行 FILESTREAM 垃圾回收器任务,直至完成。 垃圾回收进程将删除不再需要的文件。 完成此操作所需的时间取决于该数据库或容器中的 FILESTREAM 数据大小,以及最近对 FILESTREAM 数据执行的 DML 活动的数量。 尽管可以在数据库联机时运行此操作,但这可能会在运行期间由于垃圾回收进程执行的各种 I/O 活动而影响数据库性能。

备注

建议仅在必要时运行此操作,并且在通常的工作时间以外运行。

只能在单独容器或单独数据库上同时运行针对此存储过程的多个调用。

权限

要求具有 db_owner 数据库角色的成员身份。

示例

以下示例为 FSDB 数据库中的 FILESTREAM 容器运行垃圾回收器。

A.不指定任何容器

USE FSDB;
GO
EXEC sp_filestream_force_garbage_collection @dbname = N'FSDB';

B.指定一个容器

USE FSDB;
GO
EXEC sp_filestream_force_garbage_collection @dbname = N'FSDB' @filename = N'FSContainer';

请参阅

其他资源

SQL Server 2008 中的 FILESTREAM 存储