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                                TYPE       VALUE
------------------------------------ -----------------------------------
fast_start_mttr_target              integer    0

在启动数据库的时候,我们可以从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, 
ESTIMATED_MTTR EMTTR,WRITES_MTTRWMTTR,WRITES_OTHER_SETTINGS WOSET, 
CKPT_BLOCK_WRITES CKPTBW,WRITES_AUTOTUNEWAUTO,WRITES_FULL_THREAD_CKPT WFTCKPT
from v$instance_recovery;

    REIOS     TMTTR     EMTTR     WMTTR     WOSET    CKPTBW     WAUTO   WFTCKPT
---------- ---------- ---------- ---------- ---------- ------------------------------    
    49407                68                   3649819   3506125   3130700
在以上视图中,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 checkpointing refers to the periodic writes by thedatabase writer (DBWn) processes for the purpose of writing changeddata blocks from the Oracle buffer cache to disk and advancing thethread-checkpoint. Setting the database parameterFAST_START_MTTR_TARGET to a value greater than zero enables thefast-start checkpointing feature. Fast-start checkpointing shouldalways be enabled for the following reasons:
 
       It reduces the time required for cache recovery, and makes instancerecovery time-bounded and predictable. This is accomplished bylimiting the number of dirty buffers (data blocks which havechanges in memory that still need to be written to disk) and thenumber of redo records (changes in the database) generated betweenthe most recent redo record and the last checkpoint.
   
       Fast-Start checkpointing eliminates bulk writes and correspondingI/O spikes that occur traditionally with interval- basedcheckpoints, providing a smoother, more consistent I/O pattern thatis more predictable and easier to manage. If the system isnot  already near or at its maximum I/O capacity,fast-start checkpointing will have a negligible impact onperformance. Although  fast-start checkpointingresults in increased write activity, there is little reduction indatabase throughout, provided the system  hassufficient I/O capacity.
 
       从第一段中粗体标记的描述来看,当设定一个大于0的值给FAST_START_MTTR_TARGET,则自动调整检查点功能不启用。即fast-start
   checkpointing,更准确的说应该是快速启动检查点功能
   
       再看下面的这段描述,这段来自Oracle 10g OCP workshop I 14-17 英文版教程(Edition 3.1December 2008)
   
       Explicit setting of the FAST_START_MTTR_TARGET parameter to 0disables automatic checkpoint tuning.Explicit setting of theFAST_START_MTTR_TARGET parameter to a value other than 0 alsoenables the Redo Log Advisor.
   
       从上面的描述可以看出,如果将FAST_START_MTTR_TARGET设置为0将关闭检查点自动调整功能。
       
三、设定FAST_START_MTTR_TARGET

根据实际需要来设定FAST_START_MTTR_TARGET的值,这个值的设定需要考虑到可接受的实例的恢复时间、可承受的I/O吞吐量等等。
假定我们将该值设定为
SQL> alter system set fast_start_mttr_target = 30;
在事务频繁的时间段来考察视图v$instacne_recovery提供的值
       
       SQL> descv$instance_recovery;  --查看v$instance_recovery视图的结构
        Name                                     Null?   Type
        ----------------------------------------- ------------------------------------
        RECOVERY_ESTIMATED_IOS                            NUMBER
        ACTUAL_REDO_BLKS                                  NUMBER
        TARGET_REDO_BLKS                                  NUMBER
        LOG_FILE_SIZE_REDO_BLKS                           NUMBER
        LOG_CHKPT_TIMEOUT_REDO_BLKS                       NUMBER
        LOG_CHKPT_INTERVAL_REDO_BLKS                      NUMBER
        FAST_START_IO_TARGET_REDO_BLKS                    NUMBER
        TARGET_MTTR                                       NUMBER
        ESTIMATED_MTTR                                    NUMBER
        CKPT_BLOCK_WRITES                                 NUMBER
        OPTIMAL_LOGFILE_SIZE                              NUMBER
        ESTD_CLUSTER_AVAILABLE_TIME                       NUMBER
        WRITES_MTTR                                       NUMBER
        WRITES_LOGFILE_SIZE                               NUMBER
        WRITES_LOG_CHECKPOINT_SETTINGS                    NUMBER
        WRITES_OTHER_SETTINGS                             NUMBER
        WRITES_AUTOTUNE                                   NUMBER
        WRITES_FULL_THREAD_CKPT                           NUMBER
 
       两个字段:
           TARGET_MTTR        -->参照fast_start_mttr_target参数中设定的值计算出来的一个值
           ESTIMATED_MTTR     -->系统根据dirty buffer 中计算出来的值
       可能出现的情况
           1.TARGET_MTTR > ESTIMATED_MTTR --大量的事务将导致这种情况的出现
           2.TARGET_MTTR < ESTIMATED_MTTR --数据库刚刚启动时,几乎没有事务时会出现这种情况
 
SQL> select recovery_estimated_ios,actual_redo_blks,target_redo_blks ,
 target_mttr,estimated_mttr
  fromv$instance_recovery;
 
RECOVERY_ESTIMATED_IOS ACTUAL_REDO_BLKS TARGET_REDO_BLKSTARGET_MTTR ESTIMATED_MTTR
---------------------- ---------------- --------------------------- --------------
                   55             147             707         33            27
 
       可以在负载的情况下根据TARGET_MTTR来值通过v$mttr_target_advice调整该参数
 
四、启用MTTR Advisory

需要设置两个参数
STATISTICS_LEVEL        -->置为typical 或者all
FAST_START_MTTR_TARGET  -->置为非零值
 
       SQL> show parametermttr;   --目标mttr_time设定为30 s
 
       NAME                                TYPE       VALUE
       ------------------------------------ -----------------------------------------
       fast_start_mttr_target              integer    30
 
       SQL>select target_mttr,estimated_mttr fromv$instance_recovery;  --系统计算出来的mttr为33
 
       TARGET_MTTR ESTIMATED_MTTR
       ----------- --------------
                33            27     
 
       SQL> select mttr_target_for_estimatetar_est,dirty_limit,estd_cache_writes est_c_w,
          estd_cache_write_factorest_c_w_f,estd_total_writes est_t_w,estd_total_write_factorest_t_w_f
          from v$mttr_target_advice;
 
          TAR_ESTDIRTY_LIMIT   EST_C_W EST_C_W_F   EST_T_W  EST_T_W_F
       ---------- ----------- ---------- ---------- --------------------
               60       5028      3762     .7376      3762     .7376
               34       1000      5100              5100         1
               68       6248      3762     .7376      3762     .7376
               52       3808      3762     .7376      3762     .7376
               45       2735      3845     .7539      3845     .7539
   
--mttr_target_for_estimate有一个值为的最接近设定的目标时间30,以及由系统计算出的的target_mttr时间33
--同时也给出了几组不同的mttr_target值及dirty_limit,cache_write,io等来供DBA来选择设定合适的mttr

FAST_START_IO_TARGET,LOG_CHECKPOINT_TIMEOUT等参数的,他和CHECKPOINT是密切相关的,要完全理解这个参数,有几个其他参数或者概念是必要的(SCN,CHECKPOINT,CRASHRECOVERY,REDO,INCREMENTAL CHECKPOINT,CHECKPOINT QUEUE.

FAST_START_MTTR_TARGET参数取值范围是0~3600sec,如果你一但设定这个参数的值,比如200sec,

在oracle系統中,有一个视图v$instance_recovery,它是用来监视当前instance的状态的,在它里面,有两个column,ESTIMATED_MTTR,TARGET_MTTR,通常这个TARGET_MTTR会等于你设定的FAST_START_MTTR_TARGET,除非你设定的值过大或过小

ESTIMATED_MTTR,这个COLUMN记录的是从上次CHECKPOINT开始,到当前,如果系统CRASH掉,那么INSTANCE恢复所需要的时间,而这个时间,是根据DIRTYBUFFER和LOGFILE的量估算出来的,一旦这个值,接近或超过TARGET_MTTR,系统就会触发CHECKPOINT,执行完CHECKPOINT后,系统的ESTIMATED_MTTR开始重新计算.

(凡事都有例外,有可能ESTIMATED_MTTR>TARGET_MTTR).

以上就是FAST_START_MTTR_TARGET对系统所做的限制,实际上,这个参数不会修改ORACLE的配置,不会象你理解的那样,去增加CHECKPOINT的频率,也不会缩小LOGFILE,只是在适当的时候CHECKPOINT而已

转自:http://wenku.baidu.com/view/cb3364a30029bd64783e2ce7.html
0 0
原创粉丝点击