当前位置:操作系统 > Unix/Linux >>

[每日一题] 11gOCP 1z0-052 :2013-09-3 Because of frequent checkpoints

[每日一题] 11gOCP 1z0-052 :2013-09-3 Because of frequent checkpoints
 
 
正确答案:BC
 
我个人认为是这样的:
checkpoint过程
1、checkpoint触发条件,记录rba,rba包括cache low rba和on disk rba,这里指的是on disk rba(lgwr 最后写日志文件的地址)
2、checkpoint进程通知DBWn进程将所有cache low rba和on disk rba之间的脏块写入磁盘
3、确定脏块都被写入磁盘以后,更新checkpoint信息到数据文件和控制文件中。
 
normal checkpoint触发条件
1、alter system switch logfile(自动或手动)。
2、alter system checkpoint。
3、alter tablespace tablespace_name begin backup或alter tablespace tablespace_name end backup。
4、alter tablespace tablespace_name read only。
5、shutdown。

 

 
increment checkpoint触发条件
1、fast_start_mttr_target
2、log_checkpoint_timeout
3、log_checkpoint_interval
4、90% OF SMALLEST REDO LOG

 

 
综上所述,答案应该是b和c,如果redo size过小,那么会频繁的切换,从而导致频繁的checkpoint;如果fast_start_mttr_target设置的过小,比如设置为1,那么就意味着数据库估算的恢复时间超过1秒就会产生checkpoint,也会频繁的产生checkpoint,答案d只会解决磁盘些的性能问题,而不是checkpoint切换的内存问题,答案a是不可能的。
 
 
我对检查点的一点补充:
 
检查点队列(检查点只是一个数据库事件,它存在的根本意义在于减少崩溃恢复时间),在BH中有一个ckptq项,双向链表.
  (1)只有脏块才会在检查点队列中,非脏块的ckptq为空。
  (2)当块首次被更改时,块会立即被加进检查点队列。 如果检查点队列中的脏块再次被修改,并不会改变其在
检查点队列中的位置。
  (3)检查点队列中脏块的排列顺序:根据第2点,所有脏块按照首次被更改的时间的顺序排列。 更准确点说:按
 照块的lrba排列。
 
参与检查点的进程主要包括lgwr、dbwn和ckpt,分为两大类:完全检查点和增量检查点
  (1)完全检查点主要包括以下步骤:
   ①首先,在日志缓冲中确定当前的(也就是最新的)重做记录,提取其RBA与SCN作为检查点目标
   ②LGWR清空日志缓存,将重作记录写入在线日志
   ③DBWn进程将检查点目标(RBA与SCN)产生的及检查点目标之前产生的脏数据块,按RBA的顺序写入数据文件
   ④最后,CKPT进程将检查点目标(RBA与SCN)写入数据文件的头部和控制文件
 
  (2)触发完全检查点的条件:
    ①执行shutdown immediate命令
    ②执行alter system checkpoint命令
    ③LGWR切换在线日志,不论是因为日志写满还是执行alter system switch logfile命令
    ④执行部分表空间维护命令:alter tablespace ...offline|online
 
增量检查点并不会去更新数据文件头,而只是每3秒由CKPT进程去更新控制文件中的LRBA和SCN
 (1)增量检查点主要包含以下步骤
    ①CKPT每3秒一次记录检查点位置的工作(更新控制文件)
    ②CKPT定期触发DBWR
 (2)增量检查点的意义有以下两个:
   ①减少发生完全检查点时DBWn进程的工作负担
   ②提高实例恢复的速度
 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,