管理加速数据库恢复

适用于: 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 的位置更改为其他文件组,请执行以下步骤:

  1. 为 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];
    
  2. 使用以下 T-SQL 命令禁用 ADR:

    ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = OFF;
    GO
    
  3. 等到删除存储在 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 置于新文件组中。

  4. 启用 ADR 并使用以下 T-SQL 命令指定新的 PVS 位置:

    ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = ON
    (PERSISTENT_VERSION_STORE_FILEGROUP = [VersionStoreFG]);
    

监视 PVS 的大小

在数据库中启用 ADR 后,监视持久性版本存储(PVS)和 PVS 清理性能的大小。 有关更多信息,请参阅 监控和诊断加速数据库恢复问题