sp_clean_db_free_space (Transact-SQL)

适用范围:SQL Server

由于 SQL Server 中的数据修改例程,删除数据库页上留下的残差信息。 sp_clean_db_free_space 清除数据库的所有文件中的所有页面。

Transact-SQL 语法约定

语法

sp_clean_db_free_space
    [ @dbname = ] N'dbname'
    [ , [ @cleaning_delay = ] cleaning_delay ]
[ ; ]

参数

[ @dbname = ] N'dbname'

要清理的数据库的名称。 @dbname为 sysname,无默认值。

[ @cleaning_delay = ] cleaning_delay

指定各次页清理之间的延迟间隔。 @cleaning_delay为 int,默认值为 0. 这种延迟有助于减少对 I/O 系统的影响。

返回代码值

0(成功)或 1(失败)。

注解

从表中删除操作或更新操作,导致行移动的操作可以通过删除对行的引用来立即释放页面上的空间。 但是,在某些情况下,该行仍然作为虚影记录而保留在数据页上。 后台进程定期删除虚影记录。 响应查询时,数据库引擎不会返回此残差数据。 但是,在数据或备份文件的物理安全性处于危险状态的环境中,可以使用 sp_clean_db_free_space 这些虚影记录来清理这些虚影记录。 若要对数据库文件执行此操作,请使用 sp_clean_db_file_free_space

运行 sp_clean_db_free_space 所需的时间长度取决于文件大小、可用可用空间和磁盘容量。 由于运行 sp_clean_db_free_space 可能会显著影响 I/O 活动,因此建议在通常的操作小时数之外运行此过程。

在运行 sp_clean_db_free_space之前,建议创建完整的数据库备份。

相关的 sp_clean_db_file_free_space 存储过程可以清理单个文件。

权限

需要数据库角色的成员 db_owner 身份。

示例

下面的示例从 AdventureWorks2022 数据库中清除所有残留信息。

USE master;
GO

EXEC sp_clean_db_free_space @dbname = N'AdventureWorks2022';