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 中的加速数据库恢复。
语法
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;