检查点会阻止其他所有操作吗?

时间:2012-10-16 13:42:37

标签: sql-server sql-server-2008 sql-server-2008-r2 checkpoint

当Sql Server发出检查点时,是否会阻止所有其他操作,直到检查点完成为止?

如果我理解正确,当发生检查点时,服务器应该写出所有脏页。

当它完成时,它会将检查点写入事务日志,因此如果发生任何故障,它将只处理该时间点的事务(或者在检查点时已经开始的事务)。

在检查点正在进行时,sql server如何防止某些非脏页变脏?

在检查点完成之前,它是否阻止所有写入?

2 个答案:

答案 0 :(得分:2)

检查点不会阻止写入。

检查点有一个开始和结束LSN。它保证磁盘上的所有页面至少位于检查点的起始LSN。如果任何页面位于稍后的LSN(因为它已在检查点启动后写入),则无关紧要。

检查点仅保证磁盘上所有页面的最小LSN。它不能保证精确的LSN。

这是有道理的,因为您可以删除包含早于检查点启动LSN的LSN的信息的所有事务日志记录。这是检查点的目的:允许部分日志变为非活动状态。

数据一致性和正确性不需要检查点。它们只是释放日志空间并缩短恢复时间。

答案 1 :(得分:1)

  

发生检查点时,服务器应写入所有脏页

这就是它的作用。但是,checkpoint提供的保证是它会在检查点启动的那一刻写下所有脏的页面。在检查点取得进展时变脏的任何页面可能会也可能不会被写入,但肯定不会保证被写入。此保证提供的优化是物理恢复可以从上一个检查点开始重做,因为它之前的日志中的所有内容都已应用于数据页(不必重做)。甚至在Wikipedia page for ARIES上:

  

检查点的天真方式涉及锁定整个数据库   避免在创建期间更改DPT和TT   检查点。模糊记录通过写入两个日志记录来绕过它。   一个模糊日志在此处开始记录,并在准备好检查点之后   数据,实际检查点。两个记录之间的其他logrecords   可以创建

usr的答案解释了如何实现这一目标(通过使用检查点启动LSN和结束LSN)。