码迷,mamicode.com
首页 > 其他好文 > 详细

检查点Checkpoint的工作原理

时间:2015-11-03 23:04:52      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:oracle   checkpoint   

  大多数关系型数据库都采用"在提交时并不强迫针对数据块的修改完成"而是"提交时保证修改记录(以重做日志的形式)写入日志文件"的机制,来获得性能的优势。即:当用户提交事务,写数据文件是"异步"的,写日志文件是"同步"的。 

  

  这就可能导致数据库实例崩溃时,内存中的DB_Buffer 中的修改过的数据,可能没有写入到数据块中。数据库在重新打开时,需要进行恢复,来恢复DB Buffer 中的数据状态,并确保已经提交的数据被写入到数据块中。 

  检查点是这个过程中的重要机制,通过它来确定,恢复时哪些重做日志应该被扫描并应用于恢复。


  检查点发生以后,CKPT进程检查checkpoint  queue(也就是脏块链表)是否过长,如果是,则触发DBWn,将一部分脏块写入数据文件,从而缩短checkpoint queue。 

 

   Checkpoint 发生时,一方面通知dbwr进行下一批写操作,(dbwr 写入的时候,一次写的块数是有一个批量写的隐藏参数控制的); 另一方面,oracle 采用了一个心跳的概念,以3秒的频率将dbwr 写的进度反应到控制文件中,也就是把dbwr当前刚写完的dirty  buffer对应的scn 写入数据文件头和控制文件,这就是检查点scn。 

  

  这个3秒和增量检查点不是一个概念,3秒只是在控制文件中,ckpt 进程去更新当前  dbwr 写到哪里了,这个对于  ckpt 进程来说叫  heartbeat  ,heartbeat是3秒一次,3秒可以看作不停的检查并记录检查点执行情况(DBWR的写进度)。 

 

  检查点发生之后数据库的数据文件、控制文件处于一致状态的含义是不需要进行介质恢复,只表示数据文件头一致,但是并不表示数据文件内容一致,因为数据文件内容可能在没有发生检查点的其它情况下的dbwr写数据文件,这样数据文件内容就不一致,若掉电需要进行崩溃恢复。


 每隔3秒钟ckpt会去更新控制文件和数据文件,记录checkpoint执行的情况。 

 

  触发DBWR进程的条件有:  

  1.    DBWR超时,大约3秒  

  2. 系统中没有多余的空缓冲区来存放数据   

  3.    CKPT 进程触发DBWR 

 

  checkpoint有两个目的: 

  1、确保数据一致性。 

  2、使数据库能快速地恢复。


  Checkpoint期间会有下面进程发生: 

  1. DBWR写所有脏数据到数据文件; 

  2. LGWR更新控制文件和数据文件的SCN。 




本文出自 “leboit” 博客,谢绝转载!

检查点Checkpoint的工作原理

标签:oracle   checkpoint   

原文地址:http://leboit.blog.51cto.com/1465210/1709380

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!