ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 数据库切换日志的时候,为什么一定要发生检查点

数据库切换日志的时候,为什么一定要发生检查点

原创 Linux操作系统 作者:ylw66 时间:2010-06-02 11:22:09 0 删除 编辑

这是这个帖子http://www.itpub.net/viewthread.php?tid=685647piner面试提出的一个问题

这个问题我的理解是这样的:

1 alter log switch 会触发常规检查点,即会触发DBWR将全部的脏数据写入数据文件,并会更新数据文件头和控制文件的检查点信息

2 为什么一定要触发检查点:原因就是如果不触发检查点,在redo文件被覆盖时(redo日志是循环使用的,会被覆盖),相对应的脏数据还没有写入到数据文件中,一旦crash后将无法完全恢复

3 log switch 是否等待checkpoint的完成?不需要等待。首先checkpoint仅仅是个事件,发生checkpoint时,CKPT进程通知DBWR写出数据,但不会等待。同样log switch也不会等待,因为被覆盖被切换的那个log file对应的脏数据已经写入了数据文件,即该log file已经没用了,随时可以覆盖,所以不需要等待。

这也正是需要3个日志组的作用,试想 以下的场景

当前使用的log file 123都是空文件

1切换到2时,1相关的脏数据被写入,2是空文件,无需等待即可写redo

2切换到3时,2相关的脏数据被写入,3是空文件,无需等待即可写redo

3切换到1时,3 相关的脏数据被写入,1虽然不是新文件,但是相关的脏数据已经保证写入数据文件了,所以也无需等待即可写redo

这是2个日志组无法实现的,当2个日志组时2切换到1时,并不能保证1相关的脏数据全部写入,所以必须等待检查点的完成,这也降低了整个系统的性能

理解不一定正确,记忆不好,保存下以便查阅

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22111412/viewspace-664220/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-07-29

  • 博文量
    57
  • 访问量
    94742