oracle 检查点

本文转自http://www.cnblogs.com/Ronger/archive/2011/12/09/2281650.html

经过ronger这篇文章的学习了解,对检查点的了解更清晰了许多。复制到个人博中做一学习记录。

关于检查点的详细内容请看上面的链接地址。绝对有收获!

 

1.检查点(Checkpoint)的本质

许多文档把Checkpint描述得非常复杂,为我们正确理解检查点带来了障碍,结果现在检查点变成了一个非常复杂的问题。实际上,检查点只是一个数据库事件,它存在的根本意义在于减少崩溃恢复(Crash Recovery)时间

当修改数据时,需要首先将数据读入内存中(Buffer Cache),修改数据的同时,Oracle会记录重做信息(Redo)用于恢复。因为有了重做信息的存在,Oracle不需要在提交时立即将变化的数据写回磁盘(立即写的效率会很低),重做(Redo)的存在也正是为了在数据库崩溃之后,数据就可以恢复。

最常见的情况,数据库可以因为断电而Crash,那么内存中修改过的、尚未写入文件的数据将会丢失。在下一次数据库启动之后,Oracle可以通过重做日志(Redo)进行事务重演,也就是进行前滚,将数据库恢复到崩溃之前的状态,然后数据库可以打开提供使用,之后Oracle可以将未提交的数据进行回滚。

在这个过程中,通常大家最关心的是数据库要经历多久才能打开。也就是需要读取多少重做日志才能完成前滚。当然用户希望这个时间越短越好,Oracle也正是通过各种手段在不断优化这个过程,缩短恢复时间。

检查点的存在就是为了缩短这个恢复时间。

当检查点发生时(此时的SCN被称为CheckPoint SCN),Oracle会通知DBWR进程,把修改过的数据,也就是Checkpoint SCN之前的脏数据(Dirty Data)从Buffer Cache写入磁盘,当写入完成之后,CKPT进程更新控制文件和数据文件头,记录检查点信息,标识变更。

Oracle SCN的相关知识可以参考我的另外一篇文章:DBA入门之认识Oracle SCN(System Change Number)

Checkpoint SCN可以从数据库中查询得到:

 

复制代码
SQL >  select  file #,CHECKPOINT_CHANGE#,to_char(CHECKPOINT_TIME, ' yyyy-mm-dd hh24:mi:ss ' ) cpt  from  v$datafile;

FILE # CHECKPOINT_CHANGE# CPT

-- -------- ------------------ -------------------

1  913306  2011 - 11 - 16  16 : 06 : 06

2  913306  2011 - 11 - 16  16 : 06 : 06

3  913306  2011 - 11 - 16  16 : 06 : 06

4  913306  2011 - 11 - 16  16 : 06 : 06

SQL >  select  dbid,CHECKPOINT_CHANGE#  from  v$ database ;

DBID CHECKPOINT_CHANGE#

-- -------- ------------------

1294662348  913306
 

更进一步可以知道,如果Oracle可以在性能允许的情况下,使得检查点的SCN主键逼近Redo的最新更新,那么最终可以获得一个最佳平衡点,使得Oracle可以最大化地减少恢复时间。

为了实现这个目标,Oracle在不同版本中一直在改进检查点的算法。

2.常规检查点与增量检查点

为了区分,在Oracle8之前,Oracle实时的检查点通常被称为常规检查点(Conventional Checkpoint),这类检查点按一定的条件出发(log_checkpoint_interval、log_checkpoint_timeout参数设置及log switch等条件出发)。

从Oracle 8开始,Oracle引入了增量检查点(Inctrmental Checkpoint)的概念。

和以前的版本相比,在新版本中,Oracle主要引入了检查点队列(Checkpoinnt Queue)机制,在数据库内部,每一个脏数据块都会被移动到检查点队列,按照Low RBA的顺序(第一次对比数据块修改对应的Redo Byte Address)来排列,如果一个数据块进行过多次修改,该数据库在检查点队列上的顺序并不会发生变化。

当执行检查点时,DBWR从检查点队列按照Low RBA的顺序写出,实例检查点因此可以不断增进、阶段性的,CKPT进程使用非常轻量级的控制文件更新协议,将当前的最低RBA写入控制文件。

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

转载于:http://blog.itpub.net/23891491/viewspace-747890/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值