sys.sp_persistent_version_cleanup (Transact-SQL)

适用于: SQL Server 2019 (15.x) Azure SQL 数据库 Azure SQL 托管实例

手动启动持久性版本存储(PVS)清理过程,这是加速数据库恢复(ADR)的关键元素。 此更简洁的从中止的事务中回滚 PVS 中未提交的数据。

通常不需要手动 sys.sp_persistent_version_cleanup启动 PVS 清理过程。 但在某些情况下,在忙于 OLTP 活动后的已知休息/恢复期间,可能需要手动启动 PVS 清理过程。

有关 Azure SQL 上的 ADR 的详细信息,请参阅 Azure SQL 中的加速数据库恢复

Transact-SQL 语法约定

语法

sp_persistent_version_cleanup
    [ [ @dbname = ] N'dbname' ]
    [ , [ @scanallpages = ] scanallpages ]
    [ , [ @clean_option = ] clean_option ]
[ ; ]

参数

[ @dbname = ] N'dbname'

可选。 要清理的数据库的名称。 如果未提供,请使用当前的数据库上下文。 @dbname为 sysname,默认值为 NULL.

[ @scanallpages = ] scanallpages

可选。 @scanallpages,默认值为 0. 1设置为此选项时,即使未进行版本控制,此选项也会强制清除所有数据库页。

[ @clean_option = ] clean_option

可选。 可能的选项确定是否回收行外 PVS 页。 @clean_option为 int,默认值为 0. 此引用不常见,建议使用默认值 0

说明
0 默认值,未指定任何选项
1 不检查单个 PVS 页面内容的行外版本存储
2 访问的每个 PVS 页面的行外版本存储
3 仅限行内版本存储
4 仅限内部使用

返回代码值

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

结果集

无。

权限

需要 ALTER DATABASE 权限才能执行。

注解

sys.sp_persistent_version_cleanup存储过程是同步的,这意味着在从当前 PVS 清理所有版本信息之前,该存储过程不会完成。

在 SQL Server 2019(15.x)中,PVS 清理过程一次只对一个数据库执行。 在Azure SQL 数据库和Azure SQL 托管实例中,从 SQL Server 2022(16.x)开始,PVS 清理过程可以针对同一实例中的多个数据库并行执行。

如果 PVS 清理进程已针对所需数据库运行,则会阻止此存储过程,并等待完成,然后再启动另一个 PVS 清理过程。 启用 ADR 的任何数据库中的活动长时间运行的事务也可以阻止 PVS 的清理。 可以通过使用以下示例查询查找其进程来监视版本清理器任务:

SELECT *
FROM sys.dm_exec_requests
WHERE command LIKE '%PERSISTED_VERSION_CLEANER%';

限制

不能为启用了 ADR 的数据库设置数据库镜像,或者持久化版本存储(PVS)中仍有版本。 如果 ADR 已禁用,请运行 sys.sp_persistent_version_cleanup 以清理仍在 PVS 中的早期版本。

示例

若要在工作负荷或维护时段之间手动激活 PVS 清理过程,请使用以下示例脚本:

EXEC sys.sp_persistent_version_cleanup [database_name];

例如:

EXEC sys.sp_persistent_version_cleanup [WideWorldImporters];

或者,假设当前数据库上下文:

USE [WideWorldImporters];
GO
EXEC sys.sp_persistent_version_cleanup;