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 的详细信息,请参阅 加速数据库恢复。
语法
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;