recovery interval 选项

使用 recovery interval 选项可以设置每个 Microsoft SQL Server 还原数据库所需的最大分钟数。每次当 SQL Server 实例启动时,它就会恢复各个数据库,回滚未提交的事务,并前滚已提交但更改内容在 SQL Server 实例停止时尚未写入磁盘中的事务。此配置选项设置了 SQL Server 在恢复每一个数据库时所应花时间的上限。默认值为 0,指示由 SQL Server 自动配置。实际上,这表示每个数据库的恢复时间不超过 1 分钟,对于每个活动的数据库大约每 1 分钟有一个检查点。

recovery interval 选项控制 SQL Server 何时在每个数据库中执行检查点。检查点在每一个数据库基上执行。在一个检查点上,SQL Server 确保所有日志信息和所有已更改的页都从内存刷新到磁盘。这样通过减少前滚事务的数量减少了数据库恢复所需要的时间。因为检查点之前的修改都已经在检查点上刷新到磁盘,因此它们不需要进行前滚。

recovery interval 选项不影响恢复长时间运行事务所需的时间。例如,如果一个长时间运行的事务在服务器禁用前花费了两个小时来执行更新,则实际的恢复将必然花费比 recovery interval 的值更长的时间来回滚该长时间运行的事务。

SQL Server 将估计有多少数据修改可以在恢复时间间隔中前滚。通常情况下,如果自上次检查点执行以后数据库中所做的数据修改数量达到了 SQL Server 所估计的可以在恢复时间间隔中前滚的修改的数量,SQL Server 将在数据库中执行一个检查点。有时,SQL Server 会在日志达到总数的 70% 并小于所估计的数量时执行检查点。

每一个数据库的检查点发生频率取决于数据更改的数量,而不是以时间为基础的方式来确定。主要用于只读操作的数据库没有很多检查点。而事务数据库则具有经常发生的检查点。

recovery interval 的设置保持为 0(自我配置),除非注意到检查点因为出现得太过频繁而削弱了性能。如果上述情况发生,则尝试以较小增量增加该值。

recovery interval 选项是一个高级选项。如果使用 sp_configure 系统存储过程来更改该设置,则只有在 show advanced options 设置为 1 时才能更改 recovery interval。更改后的设置将立即生效,而不需要重新启动服务器。

若要将 recovery interval 选项的值设置为大于 60(分钟),则需要运行 RECONFIGURE WITH OVERRIDE 语句。