1、常规检查点(完全检查点)
Oracle 8之前采用。
在buffer cache中,通过dirty list(脏块列表)管理修改过的buffer,buffer在dirty list上无序排列,并且由于buffer被不断地修改,在列表上的位置会不断变化,ckpt触发时,需要将所有dirty buffer写入磁盘,并且将检查点信息记录到控制文件和数据文件头部。
会带来很大的I/O压力。
2、增量检查点
Oracle 8及之后版本采用。
增加checkpoint queue,将dirty buffer记录到checkpoint queue,并按照low rba()第一次对该buffer进行修改的redo byte address)进行排序,即使该buffer被多次修改,在checkpoint queue上的顺序不会改变(相对于lrba,被修改后的rba被称为hrba)。
执行增量检查点是,ckpt按lrba由低到高的顺序,将checkpoint queue中的buffer写到磁盘。增量检查点信息不会记录到控制文件中的数据文件部分,也不会记录到数据文件头部,只是记录控制文件检查点SCN(controlfile checkpoint at scn),并根据增量检查点的写出增进RBA信息。
减少数据库性能,checkpoint queue将rba和检查点关联,可以以此来确定恢复的起点。
检查点队列通过latch保护:
select name,gets,misses from v$latch where name = 'checkpoint queue latch';
包括了多个子latch:
select name,child#,gets,misses,sleeps from v$latch_children where name='checkpoint queue latch';
3、观察增量检查点的写出增进
第一次dump controlfile:
Controlfile Checkpointed at scn: 0x0000.00084096 08/12/2010 14:29:08
增量检查点:只记录在controlfile中。
THREAD #1 - status:0x2 flags:0x0 dirty:111
low cache rba:(0x9.a3d4.0) on disk rba:(0x9.a56c.0)
on disk scn: 0x0000.0008408a 08/12/2010 14:27:12
注:low cache rda - 恢复的起点,代表之前的rba所对应的dirty buffer已经写入数据文件;
On disk rba:恢复的重点,代表已经写入到redo log文件的最新的redo日志。
第二次dump controlfile:
Controlfile Checkpointed at scn: 0x0000.00084185 08/12/2010 14:32:00
增量检查点发生改变。
THREAD #1 - status:0x2 flags:0x0 dirty:1728
low cache rba:(0x9.a57a.0) on disk rba:(0x9.10b15.0)
on disk scn: 0x0000.000841a9 08/12/2010 14:31:48
脏块数量和low rba、on disk rba都发生改变,到数据文件头中的checkpoint scn不发生改变。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/56630/viewspace-1036692/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/56630/viewspace-1036692/