SQL Server 与“恢复间隔”配置相关运作是检查点(checkpoint)事件发生的频率。检查点最主要的工作是将数据库缓存中,标示为Dirty的数据与日志文件分页写入到硬盘,借此将 SQL Server 重新启动时的恢复工作,如“回滚”或“重做”的工作量减至最少。
SQL Server 会自动产生检查点事件,它在后台有一条线程负责产生与执行检查点事件。检查点事件发生的间隔是以日志文件中的数据记录数目为基础,而非时间间隔。自动产生检查点事件之间的时间间隔可能有很大的差异。若只有很少的修改发生于数据库中,自动检查点之间的时间间隔将会很长。若有许多数据被修改,自动检查点就会经常发生。
自动检查点之间的间隔是以“恢复间隔”配置算出的。此选项指定了 SQL Server 在系统重启启动的过程中,用来恢复数据库的最大时间。 SQL Server 将估计它在恢复作业的“恢复间隔”中可处理多少日志文件数据记录。自动检查点之间的间隔也取决于数据库是否使用简单恢复模式。
若数据库使用的是完整或大量记录恢复模式,每次日志文件资料到达 SQL Server 估计可在“恢复间隔”选项指定之时间内处理的数目时,就会自动产生检查点事件。若数据库使用的是简单恢复模式,每次当日志文件资料记录的数目到达下列两个数值的较小者时,也会自动产生检查点:
* 日志文件填满70%时。
* 日志文件数据记录的数目到达 SQL Server 估计可在“恢复间隔”选项指定之时间内处理的数目时。
若数据库使用的是简单恢复模式,自动检查点将清除事务日志中已经完成的事务;更新到数据库的旧记录。若数据库使用的是“完全”或“大量记录恢复”模式,日志文件的旧记录将不会被自动检查点所清空,而必须等到记录备份完成。
除了 SQL Server 自动发生检查点事件外,也可以下列方式手动地为每个数据库触发检查点:
* 执行 T-SQL 的 CHECKPOINT 表达式。目前连接所在的数据库将配置检查点。
* 在使用 ALTER DATABASE 来变更数据库选项时。
* 当 SQL Server 执行实例由于下列原因停止时:
执行 SHUTDOWN 表达式。
使用 SQL Server Service Control Manager,来停止执行数据库引擎执行实例的服务。
“恢复间隔”选项可用来配置 SQL Server 恢复数据库时, 每个数据库所需的最大分钟数。每次启动 SQL Server 执行实例时,它会恢复每个数据库,恢复未认可的事务,并回滚执行重做已认可但 SQL Server 执行实例停止时,其变更尚未写入磁盘的事务。
每个数据库的检查点频率须视所做数据修改的数量而定。若数据库的用途偏向查询,将不会有太多的检查点。而事务类型的数据库则可能会有频繁的检查。若觉得检查太频繁而导致太多的硬盘 I/O 动作有损性能,可以尝试将“恢复间隔”选项配置的分钟数加大。默认“恢复间隔”选项的配置值为0,代表 SQL Server 重新启动时,恢复工作不超过一分钟,这可能导致数据库几乎每分钟都要发生一次以上的检查点事件。
最后若要使用 sp_configure 系统存储过程来变更“恢复间隔(recovery interval)”的配置,它属于高级选项。所以要将“show advanced options”选项设成1,才能看到该选项并完成变更。
参考MSDN:
http://msdn.microsoft.com/zh-cn/library/ms188748.aspx
http://msdn.microsoft.com/zh-cn/library/ms189573.aspx
http://msdn.microsoft.com/zh-cn/library/ms191154.aspx
本文出自 “SQL Server Deep Dives” 博客,请务必保留此出处http://ultrasql.blog.51cto.com/9591438/1591636
存储引擎之必知必会 -- 恢复间隔(分钟)Recovery Interval
原文地址:http://ultrasql.blog.51cto.com/9591438/1591636