Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67137
  • 博文数量: 43
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 510
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-21 21:36
文章分类

全部博文(43)

文章存档

2009年(3)

2008年(40)

我的朋友

分类: Oracle

2008-12-12 15:57:59

检查点总结ITPUB个人空间q-t/eo#Y&~8H
8
以前都是完全检查点,每次触发,则记录当前数据库SCN号,并将内存里所有截至到该SCN号的脏数据块都刷新到数据文件里。从而同步数据文件。ITPUB个人空间]H:j
i KJ


ZU[1]W#\-s
l184046
着内存越来越便宜,以及控制实例恢复的需要,完全检查点已经不适合实际情况了。于是从oracle 8开始,oracle引入了增量检查点,通过增量检查点来减少实例恢复的时间。为此,oracle引入了checkpoint queue,按照数据块第一次被修改的先后顺序,将脏数据块挂到该队列上。同时还在该队列上记录了每个脏数据块第一次被修改时产生的redo entry的地址,这叫LRBAITPUB个人空间S cMf q
ITPUB
个人空间R&](fL#h]­B
增量检查点的启动时机由以下参数控制:
!B|Q2^5Nf[1]i+eD9X184046·fast_start_mttr_target
:应用从CKPT position到最后一个redo entry之间所有redo entry所花的时间。也就是实例前滚所花费的时间。ITPUB个人空间!B5D)^r%P
·LOG_CHECKPOINT_INTERVAL
:如果自从上一次检查点启动以来所累积的日志块个数达到该参数,则触发增量检查点,从而触发DBWn写脏块。
0Mb0{j
}1k w184046
·LOG_CHECKPOINT_TIMEOUT
:两次检查点启动的时间间隔。实际也就是控制脏块在内存里待多长时间的参数。ITPUB个人空间})Yn
M r~%~V

·90%*(SUM(log_size) – MAX(log_size))
:如果产生的redo块的量达到该值,则启动增量检查点。
9AH#U­`En3?184046ITPUB
个人空间%bX$dr3f
只要满足上面条件中的任何一个,就会启动增量检查点。增量检查点一旦启动,则会记录当前CKPT SCN
@;J1jJ Zn184046
然后通知DBWn进程去写checkpoint queue上所挂载的脏块,至于写到哪个脏块为止,则不超过到当前CKPT SCN
[1]s


h9^'?[1]?3O*W"J
s184046DBWn进程是批量写脏块的,脏块个数不到一定程度,DBWn不会真的去写。而每次写多少个脏块的个数则由一个隐藏参数控制。ITPUB个人空间%KTc"?%Q


rctCW6F"u184046
3秒钟(这叫heartbeat,心跳),增量检查点也还会启动一次,只不过这时增量检查点启动只是查看一下checkpoint queue,将该队列上的第一个脏块所对应的redo block的地址写入控制文件,也就是将CKPT Position写入控制文件,并不会触发DBWn进程写脏块。所以是打引号的增量检查点。ITPUB个人空间+j:wE/K
阅读(435) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~