首页 > IT职业 > IT生活 > 对checkpoint的理解一文的学习
checkpoint的作用是什么? 看这了篇文章受益颇多.
http://space.itpub.net/7199859/viewspace-255305
[@more@]log switch会触发一个检查点,在检查点完成之前,日志文件是不能够被重用的,状态也就是active,那么什么时间才会inactive?
今天对这个问题有了更深的理解:
其实通常所说的logfile switch 触发检查点,实际上就是给出一个标记,而并不真正去写脏块。等待增量检查点做到了那个标记,再标识完成。
所以触发增量检查点的时机就显的尤为重要:
90% OF THE SMALLEST REDO LOGFILE
意味着最后一次增量检查点与当前日志文件末尾所差的redo block数量如果超过最小redo log的90%?敲淳突岽シ⒃隽考觳榈恪?/p>
FAST_START_MTTR_TARGET:实例恢复的时间限制,
oracle将这个时间换算成redo blocks数量,当log buffer中未写入log file的redo block数量超过这个值,就会触发增量检查点。
FAST_START_IO_TARGET:实例恢复所需要读取的redo blocks数量,当log buffer中未写入log file的redo block数量超过这个值,就会触发增量检查点。
LOG_CHECKPOINT_TIMEOUT:2次增量检查点的时间间隔。
LOG_CHECKPOINT_INTERVAL:最后一次增量检查点与当前日志文件末尾所差的redo block数量。
注意:增量检查点并不是将脏列表中的所有脏块都写出到数据文件中,而是写出一部分,保证满足所有条件即可。
也学了两个重要的视图,v$instance_recovery 和x$kcccp
看看当前各个增量检查点触发条件的值:
SQL> select actual_redo_blks act,target_redo_blks target,LOG_FILE_SIZE_REDO_BLKS logfile,LOG_CHKPT_TIMEOUT_REDO_BLKS log_check,target_mttr tmttr,estimated_mttr es_mttr from v$instance_recovery;
62967 170577 184320 170577 0 14
--LOG_FILE_SIZE_REDO_BLKS的值是184320,这正好是日志文件的90%
--日志块是0.5K一个,换算成M,184320*0.5/1024=90 日志文件是100M
--再看一下最后一次检查点的位置:
SQL> select CPLRBA_SEQ,CPLRBA_BNO,CPODR_SEQ,CPODR_BNO from x$kcccp;
CPLRBA_SEQ CPLRBA_BNO CPODR_SEQ CPODR_BNO
---------- ---------- ---------- ----------
47 107610 47 170607
--最后一次检查点发生在47号日志的17610块,当前日志也是47号,日志尾在170607块
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/271283/viewspace-1003154/ ,如需转载,请注明出处,否则将追究法律责任。