FAST_START_MTTR_TARGET
来源:互联网 发布:红中麻将源码教程 编辑:程序博客网 时间:2024/04/29 09:27
FAST_START_MTTR_TARGET
从Oracle 10g R2开始,数据库可以实现自动调整的检查点.
使用自动调整的检查点,Oracle数据库可以利用系统的低I/O负载时段写出内存中的脏数据,从而提高数据库的效率。
因此,即使数据库管理员设置了不合理的检查点相关参数,Oracle仍然能够通过自动调整将数据库的CrashRecovery时间控制在合理的范围之内。
当FAST_START_MTTR_TARGET参数未设置时,自动检查点调整生效。通常,如果我们必须严格控制实例或节点恢复时间,那么我们可以设置FAST_START_MTTR_TARGET为期望时间值;如果恢复时间不需要严格控制,那么我们可以不设置FAST_START_MTTR_TARGET参数,从而启用Oracle10g的自动检查点调整特性。
当取消FAST_START_MTTR_TARGET参数设置之后:
SQL> show parameter fast_start_mttr
NAME
------------------------------------ -----------------------------------
fast_start_mttr_target
在启动数据库的时候,我们可以从alert文件中看到如下信息:
Wed Jan 11 16:28:12 2006MTTR advisory is disabled becauseFAST_START_MTTR_TARGET is not set
检查v$instance_recovery视图,我们可以发现Oracle10g中的改变:
SQL> select RECOVERY_ESTIMATED_IOS REIOS,TARGET_MTTRTMTTR,
2
3
4
---------- ---------- ---------- ---------- ---------- ------------------------------
在以上视图中,WRITES_AUTOTUNE字段值就是指由于自动调整检查点执行的写出次数,而CKPT_BLOCK_WRITES指的则是由于检查点写出的Block的数量。
笔者Google了一下关于描述了FAST_START_MTTR_TARGET参数,看到很多文章将该参数置为0时为启用自动调整的检查点功能
如:Oracle10gR2自动检查点调整的新特性
对其中FAST_START_MTTR_TARGET=0为启用自动调整的检查点的这个观点笔者着实不敢苟同。
一、关于FAST_START_MTTR_TARGET参数
是一个加快实例恢复的参数,我们可以根据服务级别来定义一个合理的、可接受的值,该值的单位为秒。比如设定为60s,即1分钟。
假定该值处于合理的情况之下,则一旦实例崩溃,在60s以内实例应当能够被恢复。
合理即是该值不能太大,也不能太小。太大则实例恢复所需的时间较长,太小则导致大量数据的及时写入,增加了系统的I/O。
影响实例恢复时间长短的主要因素即是从最近检查点位置到联机重做日志尾部之间的距离。距离越长则所需要的cache recovery和undo、redo的时间越长。
所以如何有效的缩短最近检查点位置与联机重做日志尾部之间的距离,这正是FAST_START_MTTR_TARGET的目的。
关于检查点的触发条件有很多,比如日志切换、数据库shutdown、开始结束备份表空间等。检查点的分类也很多,比如完全检查点、部分检查点、增量检查点等。
FAST_START_MTTR_TARGET的值实际上也是触发检查点的一个触发条件。
当内存中产生的dirtybuffer所需的恢复时间(estimated_mttr)如果到达FAST_START_MTTR_TARGET的指定时间,则检查点进程被触发。
检查点进程一旦被触发,将通知DBWn进程将按检查点队列顺序将脏数据写入到数据文件,从而缩短了最后检查点位置与联机重做日志间的距离,减少了实例恢复所需的时间。
二、FAST_START_MTTR_TARGET = 0的质疑
很多文章描述了FAST_START_MTTR_TARGET =0,即为未设置,表示启用自动检查点功能,下面是来自Oracle的官方文档中的一段,
三、设定FAST_START_MTTR_TARGET
根据实际需要来设定FAST_START_MTTR_TARGET的值,这个值的设定需要考虑到可接受的实例的恢复时间、可承受的I/O吞吐量等等。
假定我们将该值设定为
SQL> alter system set fast_start_mttr_target = 30;
在事务频繁的时间段来考察视图v$instacne_recovery提供的值