管理加速数据库恢复
适用于: SQL Server 2019 (15.x) 及更高版本
本文介绍了如何在 SQL Server 2019 (15.x) 及更高版本中使用 Transact-SQL (T-SQL) 启用和禁用加速数据库恢复 (ADR),以及如何更改 ADR 使用的永久性版本存储 (PVS) 文件组。
注意
在 Azure SQL 数据库、Azure SQL 托管实例和 Microsoft Fabric 中的 SQL 数据库中,始终启用加速数据库恢复 (ADR)。 如果观察到 PVS 的高存储使用率或 ADR 清理速度缓慢等问题,请参阅 监视和排查加速数据库恢复问题 或联系 Azure 支持 。
谁应考虑加速数据库恢复
许多客户发现加速数据库恢复 (ADR) 是一项可改善数据库恢复时间的重要技术。
如果数据库工作负荷经常遇到以下情况,则可能会受益于 ADR:
- 无法避免的长期运行事务。 例如,在长期运行的事务面临回滚风险的情况下,ADR 可以提供帮助。
- 导致事务日志显著增长的活跃事务。
- 长时间进行的数据库恢复可能影响数据库的可用性(例如,在意外的 SQL Server 重启或手动事务回滚之后)。
如果您的应用程序在单个事务中频繁进行大量单行修改,那么您的工作负载可能不适合使用ADR。 请考虑尽可能将多行语句的修改批量处理,并避免进行大量小型 DML 事务。
启用 ADR
ADR 默认处于关闭状态,从 SQL Server 2019 (15.x) 开始可用。
使用以下 Transact-SQL (T-SQL) 命令启用 ADR:
ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = ON;
启用或禁用 ADR 需要独占数据库锁。 这意味着命令 ALTER DATABASE
被阻止,直到所有活动会话都消失,并且任何新会话都在 ALTER DATABASE
命令后等待。 如果操作的完成和锁的移除至关重要,可以使用终止子句 WITH ROLLBACK [IMMEDIATE | AFTER {number} SECONDS | NO_WAIT]
以中止数据库中任何活动会话。 有关详细信息,请参阅 ALTER DATABASE SET 选项。
禁用 ADR
使用以下 T-SQL 命令禁用 ADR:
ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = OFF;
GO
即使在 ADR 被禁用后,系统仍然可能需要那些存储在 PVS 中的版本进行逻辑还原,直到所有活动事务完成。
更改 PVS 文件组
默认情况下,永久性版本存储 (PVS) 数据位于文件组 PRIMARY
上。 如有必要,可以将 PVS 移到其他文件组。 例如,PVS 可能需要更多空间或更快的存储。
若要将 PVS 的位置更改为其他文件组,请执行以下步骤:
为 PVS 创建文件组,并将至少一个数据文件添加到此文件组。 例如:
ALTER DATABASE [<db_name>] ADD FILEGROUP [VersionStoreFG]; GO ALTER DATABASE [<db_name>] ADD FILE ( NAME = N'VersionStoreFG', FILENAME = N'E:\DATA\VersionStore.ndf', SIZE = 8192 MB, FILEGROWTH = 64 MB ) TO FILEGROUP [VersionStoreFG];
使用以下 T-SQL 命令禁用 ADR:
ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = OFF; GO
等到删除存储在 PVS 中的所有版本。
若要使用新的 PVS 位置启用 ADR,请先确保已从以前的 PVS 位置清除所有版本信息。 可以通过 sys.sp_persistent_version_cleanup 存储过程来强制进行清理:
EXEC sys.sp_persistent_version_cleanup [<db_name>];
sys.sp_persistent_version_cleanup
存储过程是同步的,这意味着在从当前 PVS 清理所有版本信息之前,该存储过程不会完成。 完成后,假设 ADR 已禁用,可以通过查询 sys.dm_tran_persistent_version_store_stats 并检查persistent_version_store_size_kb
的值来验证版本信息是否已删除。 例如:SELECT DB_NAME(database_id), persistent_version_store_size_kb FROM sys.dm_tran_persistent_version_store_stats WHERE database_id = [MyDatabaseID];
当
persistent_version_store_size_kb
的值0
时,可以重新启用 ADR 并将 PVS 置于新文件组中。启用 ADR 并使用以下 T-SQL 命令指定新的 PVS 位置:
ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = ON (PERSISTENT_VERSION_STORE_FILEGROUP = [VersionStoreFG]);
监视 PVS 的大小
在数据库中启用 ADR 后,监视持久性版本存储(PVS)和 PVS 清理性能的大小。 有关更多信息,请参阅 监控和诊断加速数据库恢复问题。