1.检查点的操作
检查点在数据库中执行下列过程:
- 将记录写入标记检查点起点的日志文件。
- 将为检查点记录的信息存储在检查点日志记录链内。
检查点中记录的一条信息是第一条日志记录的日志序列号 (LSN),该 LSN 必须存在才能进行成功的数据库范围的回滚。 该 LSN 称为“最小恢复 LSN”(“MinLSN”)。 MinLSN 是下列各项中的最小者:- 检查点起点的 LSN。
- 最早的活动事务起点的 LSN。
- 尚未传递给分发数据库的最早的复制事务起点的 LSN。
检查点记录还包含所有已修改数据库的活动事务的列表。
- 如果数据库使用简单恢复模式,则标记在 MinLSN 前重用的空间。
- 将所有脏日志和数据页写入磁盘。
- 将标记检查点结束的记录写入日志文件。
- 将这条链起点的 LSN 写入数据库引导页。
2.手动触发检查点的操作
下列情况下将出现检查点:
- 显式执行 CHECKPOINT 语句。 用于连接的当前数据库中出现检查点。
- 在数据库中执行了最小日志记录操作,例如,在使用大容量日志恢复模式的数据库中执行大容量复制操作。
- 已经使用 ALTER DATABASE 添加或删除了数据库文件。
- 通过 SHUTDOWN 语句或通过停止 SQL Server (MSSQLSERVER) 服务停止了 SQL Server 实例。 任一操作都会在 SQL Server 实例的每个数据库中生成一个检查点。
- SQL Server 实例在每个数据库内定期生成自动检查点,以减少实例恢复数据库所需的时间。
- 进行了数据库备份。
- 执行了需要关闭数据库的活动。 例如,AUTO_CLOSE 设置为 ON 并且关闭了数据库的最后一个用户连接,或者执行了需要重新启动数据库的数据库选项更改。
3.自动触发检查点的条件
SQL Server 数据库引擎生成自动检查点。 自动检查点之间的间隔基于使用的日志空间量以及自上一个检查点以来经历的时间。 如果只在数据库中进行了很少的修改,自动检查点之间的时间间隔可能变化很大并且很长。 如果修改了大量数据,自动检查点也会经常出现。
使用“恢复间隔”服务器配置选项为服务器实例上的所有数据库计算自动检查点之间的间隔。 此选项指定数据库引擎在系统重新启动时恢复数据库所用的最长时间。 数据库引擎将估计在执行恢复操作期间自己在“恢复间隔”内能够处理多少条日志记录。
自动检查点之间的间隔也取决于恢复模式:
- 如果数据库使用的是完整恢复模式或批量日志恢复模式,则每当日志记录数达到数据库引擎估计在“恢复间隔”选项中指定的时间内可以处理的数量时,便会生成一个自动检查点。
- 如果数据库使用的是简单恢复模式,只要日志记录数达到下面两个值中较小的那个值,就会生成自动检查点:
- 日志已满 70%。
- 日志记录数达到数据库引擎估计在“恢复间隔”选项指定的时间内能够处理的记录数。
默认情况下“恢复间隔”是0,表示数据库会自动决定恢复间隔时间,约一分钟。表示:会一分钟执行一次检查点。
检查点