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 清理过程。

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

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 权限。

注解

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 已禁用,请运行 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;