传统重做阶段- 在此阶段
Posted: Mon Feb 10, 2025 3:57 am
最后一个组件是 Cleaner:
清理程序– 此进程定期运行并清理不需要的页面版本。您还可以运行 sp_persistent_version_cleanup 并手动启动清理进程
现在让我们看看传统恢复的工作方式与 ADR 恢复过程,以及如何使 ADR 更快、更高效。
下图说明了传统的数据库恢复过程;(参考 - MS 文档)
-对-
下图描述了 ADR 过程;(参考 - MS 文档)
此恢复过程包括三个步骤:
传统分析阶段- 将所有事务置于 SQL Server 崩溃\停止时相同的状态,它必须从最后一个检查点读取事务日志并向前扫描直到日志末尾。
-对-
ADR 分析阶段——它遵循与传统分析阶段相同的步骤;但它还创建 Slog 并在其上存储非版本化的操作日志。
从最早的未提交事务到日志末尾,并将所有事务恢复到系统崩溃时的状态。
-对-
ADR 重做阶段– 该阶段分为两个部分,第一部分中,SQL 会从最早的未提交事务开始正向扫描 S-log,直到 S-log 末尾。由于 S-log 保存的记录较少(仅保存非版本化操作日志),因此该操作速度更快。第二部分中,它会重新应用上一个检查点的所有 Trn 日志。
传统的撤消阶段- 顾名思义,SQL 会以相反的方向读取日志并回滚系统崩溃时活动的事务所做的所有更改。
-对-
ADR 撤消阶段– 系统崩溃时,为了回滚活动事务,它使用 S-log 和 PVS,分别存储每个事务的非版本和行级 牙买加电报数据 版本。因此,这是一个更快的过程。当有人取消长时间运行的事务时,它也使用相同的撤消机制。
通过此比较,可以清楚地看出,使用传统恢复时,恢复数据库的时间更长,因为它取决于服务器崩溃或回滚事务时活动事务的大小。而使用 ADR 时,情况并非如此;它使用 PVS 和 S-log 来加快恢复速度。它还可以控制 Trn 日志的增长;通过定期截断日志;ADR 无需等到长事务完成后才能截断日志。
Microsoft 特别建议对具有非常长时间运行的事务、极端事务日志增长的数据库,或者当 SQL Server 意外重新启动或有人手动启动任何长事务的回滚时恢复时间较长的数据库使用 ADR。
这是 SQL 2019 附带的一项不错的功能,但由于需要执行版本控制操作,它也会减慢所有 DML 操作的速度。这就是原因,默认情况下此数据库选项处于关闭状态,您可以通过仔细评估您的环境和需求来启用它。如果您正在寻找 ADR 或 SQL Server 支持,请联系我们的专家。
清理程序– 此进程定期运行并清理不需要的页面版本。您还可以运行 sp_persistent_version_cleanup 并手动启动清理进程
现在让我们看看传统恢复的工作方式与 ADR 恢复过程,以及如何使 ADR 更快、更高效。
下图说明了传统的数据库恢复过程;(参考 - MS 文档)
-对-
下图描述了 ADR 过程;(参考 - MS 文档)
此恢复过程包括三个步骤:
传统分析阶段- 将所有事务置于 SQL Server 崩溃\停止时相同的状态,它必须从最后一个检查点读取事务日志并向前扫描直到日志末尾。
-对-
ADR 分析阶段——它遵循与传统分析阶段相同的步骤;但它还创建 Slog 并在其上存储非版本化的操作日志。
从最早的未提交事务到日志末尾,并将所有事务恢复到系统崩溃时的状态。
-对-
ADR 重做阶段– 该阶段分为两个部分,第一部分中,SQL 会从最早的未提交事务开始正向扫描 S-log,直到 S-log 末尾。由于 S-log 保存的记录较少(仅保存非版本化操作日志),因此该操作速度更快。第二部分中,它会重新应用上一个检查点的所有 Trn 日志。
传统的撤消阶段- 顾名思义,SQL 会以相反的方向读取日志并回滚系统崩溃时活动的事务所做的所有更改。
-对-
ADR 撤消阶段– 系统崩溃时,为了回滚活动事务,它使用 S-log 和 PVS,分别存储每个事务的非版本和行级 牙买加电报数据 版本。因此,这是一个更快的过程。当有人取消长时间运行的事务时,它也使用相同的撤消机制。
通过此比较,可以清楚地看出,使用传统恢复时,恢复数据库的时间更长,因为它取决于服务器崩溃或回滚事务时活动事务的大小。而使用 ADR 时,情况并非如此;它使用 PVS 和 S-log 来加快恢复速度。它还可以控制 Trn 日志的增长;通过定期截断日志;ADR 无需等到长事务完成后才能截断日志。
Microsoft 特别建议对具有非常长时间运行的事务、极端事务日志增长的数据库,或者当 SQL Server 意外重新启动或有人手动启动任何长事务的回滚时恢复时间较长的数据库使用 ADR。
这是 SQL 2019 附带的一项不错的功能,但由于需要执行版本控制操作,它也会减慢所有 DML 操作的速度。这就是原因,默认情况下此数据库选项处于关闭状态,您可以通过仔细评估您的环境和需求来启用它。如果您正在寻找 ADR 或 SQL Server 支持,请联系我们的专家。