DBA之路---Oracle的checkpoint机制

oracle的checkpoint机制

#数据库内部时间,检查点激活时会触发DBWR数据磁盘写入进程,将缓冲区的脏数据块写到数据文件中

#目的为 1、保证数据库的一致性即将仓数据写出到硬盘
#      2、缩短实例恢复时间,将实例因异常关闭存在重放日志文件中的脏数据写入到磁盘中
#检查点越多,越能有效减少脏数据的写入时间,进而减少实例恢复时间

select file#,checkpoint_change#,last_change# from v$datafile;
  #查看所有checkpoint

oracle允许下面类型进行触发检查点处理脏块
1、每次切换redo日志文件
2、达到log_checkpoint_timeout延迟时间
3、挡墙日志文件已经存达到(log_checkpoint_interval * os块(bytes))得数据
4alter system switch logfile
5、直接由alter system checkpoint实现
6、正常关闭数据库:shutdown immediat

checkpoint机制注意点
1、redo的每个日志都是可以设置大小的,这个大小需要合适,当redo日志块超过这个大小就会发生redo日志切换从而触发检查点,而频繁的日志切换是需要消耗性能的
#如果 DBWR 写入速度过慢,或者在日志全满之前发生日志切换,或者日志文件过小,就会遇到这种情况。在数据库等待检查点时,redo 生成过程会停止,直到完成日志切换。

检查点分类

  • 完全检查点 fullcheckpoint

    记下当前scn值,将在此之前的所有重放缓存日志中脏数据一次性写完,同时将该scn同步到控制文件与数据头中(适合数据量少的情况)

    可以引起完全检查点启动的四个数据库动作  
    a)正常关闭数据库:shutdown immediate
    b)手动检查点切换:alter system checkpoint; 
    c)日志切换:alter system switch logfile; #待定
    d)数据库热备模式:alter database begin backup; 
    #alter system checkpoint,然后观察v$datafile和v$datafile_header中scn被更新。
      select file#,checkpoint_change#,last_change# from v$datafile;#直接查看所有检查点
      select checkpoint_change from v$database
     #查看数据库保存基准时间(checkpoint机制被触发时所使用的SCN)
    
  • 增量检查点 incremental checkpoint

    oracle中所有被修改但是没有commit都叫脏块,这些脏块的首次变脏(被修改)的时间会被记录同时生成一个双向链表指针串联,作为增量检查点所使用队列。

    可以使恢复用的检查点位置前移(可以理解为SCN值靠近oracle最近记录的北京标准时间)缩短实例恢复时间,但是由于使时刻在进行脏块恢复,所以io性能会受影响

    增量检查点不会同步更新数据文件头的SCN,跟完全检查不一样

    #增量检查点一旦发生,数据库的DBWR写入磁盘进程就会执行,之后沿着队列将脏块刷到磁盘上。
    #每次执行刷新后在队列停止的点,为下次执行的增量检查点位置。
    #该检查点位置用于在崩溃后进行实例恢复的记录节点
    #执行刷新成功后的块会存到对应日志地址记录在控制文件中
    #增量检查点位置
    
    #相关参数
     #FAST_START_MTTR_TARGET 
         #涉及多长时间恢复实例----增量检查点会时刻进行调整该参数
         #单位s,oracle通过此参数计算内存中积累的dirty buffer脏块从恢复redo重放日志中数据的时间。即实例崩溃后进行恢复索要花费的秒数。
         select TARGET_MTTR,ESTIMATED_MTTR from v$instance_recovery
         #查询oracle依照该参数进行计算后得出的脏块恢复时间estimated_mttr和系统强制执行所需要平均回复时间
         
     #LOG_CHECKPOINT_INTERVAL
         #指定增量检查点目标应滞后于当前日志尾部的最大redo块数量
         #与FAST_START_MTTMTARGET参数冲突,属于有她没我。在多数linux上默认512
         #影响检查点的发生时间,也影响恢复的前滚阶段期间完成数据库恢复操作所需的时间(数据库恢复需要读取redo日志,单个日志过大是有一定影响的)
     
     #LOG_CHECKPOINT_TIMEOUT 
         #指定增量检查点目标应滞后于当期日志尾部的最长秒数(缓冲区的脏块写入到磁盘前的保持时间)
         #变向影响检查点执行时间
         #本参数设定后检查点进行检查属于每s执行,非常容易产生多余的检查点影响正在进行中的事务的性能
     
     #LOG_CHECKPOINTS_TO_ALERT
          show parameter log_checkpoints
          alert system set llog_checkpoints_to_alert = true
         #检查点执行提示参数,检查检查点是否按所需频率发生
         
         
      
    
  • 局部检查点 partial checkpoint

    #仅作为表空间级检查点使用
    #oracle中任意表空间可以随意下线,表结构任何情况下都能创建,但是表空间下线后不允许插入数据。
     #因表结构存储是在sys表空间中,但是数据只能存在表空间指向的数据文件
      #system表空间一般不能也不会下线
      #允许用于媒介恢复,datafile会写scn
    

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值