- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于checkpoint比较经典的解释
CheckPoint Process 的深入研究
“三个钟”的故事:假设一个公司只有三个员工,每个员工有自己的一个钟。该公司规定,每天早晨8:30上班。有一天,非常不幸,三个员工的钟的时间各不相同,在没有其他外部因素的帮助下,他们无法确定当前的确切时间,他们无法上班,该公司无法正常的OPEN 运作。
这个故事,帮助我们说明,在实例经过分配内存结构,加载控制文件后,然后要打开数据库的时候,需要做到控制文件,数据文件,联机重做日志保持相互状态一致性,数据库才可以打开。当数据库发生实例不正常关闭时(比如系统掉电或者Shutdown abort 进行关闭),要进行实例恢复,Oracle 数据库具有相应的机制来实现这一点。
像任何一家公司一样,不同的员工具有不同的技能专长,负责不同的工作,但是一个成功的项目,需要一个优秀的项目经理,来保持,督促项目中的成员各自工作步调相互一致。在Oracle 实例中,这样的一个重要角色,被检查点(CheckPoint) 进程(CKPT)担任。Oracle 实例在必要的时候,出现检查点,当检查点出现时,CKPT 进程一方面催促DBWR 进程及时地把该检查点时刻前DB_Buffer 中被一些Service_Process 进程修改过的数据及时写入数据文件中,写完之后,CKPT 进程更新相关的数据文件和控制文件的同步时刻点。也就是说,Oracle 实例在运行过程中,需要CKPT 进程来定期同步控制文件、数据文件和联机日志文件的“时间点”。 在这篇文章当中,我们将详细,深入的讨论检查点和检查点进程的作用。
注:这篇文章主要参考Http://www.AskGuoY 上的一篇文章
大多数关系型数据库都采用“在提交时并不强迫针对数据块的修改完成”而是“提交时保证修改记录(以重做日志的形式)写入日志文件”的机制,来获得性能的优势。这句话的另外一种描述是:当用户提交事务,写数据文件是“异步”的,写日志文件是“同步”的。这就可能导致数据库实例崩溃时,内存中的DB_Buffer 中的修改过的数据,可能没有写入到数据块中。数据库在重新打开时,需要进行恢复,来恢复DB Buffer 中的数据状态,并确保已经提交的数据被写入到数据块中。检查点是这个过程中的重要机制,通过它来确定,恢复时哪些重做日志应该被扫描并应用于恢复。
检查点和检查点进程的操作的三个步骤:
A、系统触发一个检查点,系统并记录该检查点时刻的Checkpoint SCN 号,并记录该时刻修改的DB Buffer的块所参考的RBA 作为Checkpoint RBA RBA (Redo Byte Address)。
B、该Checkpoint RBA 之前的日志实体所参考的DB_Buffer 中数据块的修改,要被写出到数据文件中。
C、完成2步骤后,CKPT 进程记录该检查点完成信息到控制文件。
只有上面三个步骤完成,才表示系统的检查点已经被推进,推进了日志文件,数据文件,控制文件到一个新的“同步点”。
检查点只发生在下列情形:
管理员使用:Alter system checkpoint 命令;
实例被正常的关闭;
特别注意:日志切换并不导致一个完全检查点的发生。
如何确定哪些DB_Buffer中的数据块需要被写到磁盘上,是一个蛮复杂的算法。大致思想就是:所有dirty data按照Low RBA 的升序进行链接成一个list,当CKPT被唤醒的时候,首先先从控制文件读取上次check point,把中间这段时间的dirty data 写到磁盘上。
二、触发的条件
这里需要明白两个概念“完全检查点和增量检查点”的区别。
增量检查点(incremental checkpoint)oracle8以后推出了incremental checkpoint的机制,在以前的版本里每checkpoint时都会做一个full thread checkpoint,这样的话所有脏数据会被写到磁盘,巨大的i/o对系统性能带来很大影响。为了解决这个问题,oracle引入了checkpoint queue机制,每一个脏块会被移到检查点队列里面去,按照low rdb(第一次对此块修改对应的redo block address)来排列,靠近检查点队列尾端的数据块的low rba值是最小的,而且如果这些赃块被再次修改后它在检查点队列里的顺序也不会改变,这样就保证了越早修改的块越早写入磁盘。每隔3秒钟ckpt会去更新控制文件和数据文件,记录checkpoint执行的情况。
在运行的Oracle 数据中,有很多事件、条件或者参数来触发检查点。比如? ? ? ( 当已通过正常事务处理或者立即选项关闭例程时;(shutdown immediate或者Shutdown normal;)
文档评论(0)