加速数据库恢复是sql server 于2019 版本开始引入的一项新特性,简称ADR。
ADR 的主要优势在于:
-
快速且一致的数据库恢复
使用 ADR,长时间运行的事务不会影响整体恢复时间,且无论系统中活动事务的数量或大小如何,都可以实现快速且一致的数据库恢复。
-
即时事务回滚
使用 ADR,事务回滚是即时的,与事务处于活动状态的时间或已执行的更新次数无关。
-
主动日志截断
即使存在活动且长时间运行的事务,ADR 也会主动截断事务日志,这可以防止其增长失控。
如果没有ADR,sql server 恢复模式将遵循分析、重做、撤销3个阶段:
-
分析阶段
SQL Server 从上一个成功的检查点(或最早的脏页 LSN)的开头起到末尾,执行事务日志的前向扫描,以确定 SQL Server 停止时每个事务的状态。
-
重做阶段
SQL Server 从最早的未提交事务起到末尾,执行事务日志的前向扫描,通过重做所有已提交的操作使数据库恢复到崩溃时的状态。
-
撤消阶段
对于在崩溃时处于活动状态的每个事务,SQL Server 向后遍历日志,从而撤消该事务执行的操作。
基于次恢复模式设计,sql server数据库从意外中断中恢复所需时间与活动事务运行时间成正比,事务回滚将花费与事务活动相当的时间,此外长时间活动的大事务将导致事务日志不能截断,有消耗尽磁盘空间的风险。
ADR 通过完全重新设计数据库引擎恢复过程来解决上述问题:
- 通过避免以最早的活动事务为起始点/结束点扫描日志,使其保持恒定时间/即时状态。 使用 ADR,仅从上一个成功的检查点 [或最早的脏页日志序列号 (LSN)] 处理事务日志。 因此,恢复时间不受长时间运行的事务影响。
- 由于不再需要为整个事务处理日志,因此可最大程度地减少所需的事务日志空间。 当检查点和备份出现时,可以主动截断事务日志。
ADR 通过SLOG(系统日志流),加速了事务REDO、UNDO:
-
分析阶段
除了为非版本控制操作重建 SLOG(系统日志流)和复制日志记录,此过程与传统恢复模式相同。
-
重做阶段
分为两个子阶段
-
子阶段 1
从 SLOG 重做(从最早的未提交事务到上一个检查点)。 重做是一种快速操作,因为它只需要处理 SLOG 中的一些记录。
-
子阶段 2
从上一个检查点(而不是最早的未提交事务)起的事务日志重做。
-
-
撤消阶段
使用 ADR,撤消阶段几乎即时完成 - 通过使用 SLOG 撤消非版本控制操作以及通过具有逻辑还原的持久版本存储 (PVS) 执行行级别基于版本的撤消。
启用ADR:
ALTER DATABASE dbname SET ACCELERATED_DATABASE_RECOVERY = ON;
标签:事务,ADR,数据库,Server,文档,Sql,日志,重做 From: https://www.cnblogs.com/oradba/p/17125745.html