博客
关于我
oracle深度解析检查点
阅读量:794 次
发布时间:2023-02-25

本文共 1602 字,大约阅读时间需要 5 分钟。

Oracle引入了检查点机制来解决LGWR和DBWR可能导致的不一致问题,从而确保数据库的一致性。检查点分为完全检查点和增量检查点两种形式。

完全检查点

在Oracle8i之前,所有检查点都是完全检查点。完全检查点会将数据缓冲区中的所有脏数据块写入数据文件,并同步数据文件和控制文件,确保数据库一致性。从8i开始,完全检查点仅在以下两种情况下发生:

  • DBA手动执行ALTER SYSTEM CHECKPOINT命令
  • 数据库正常关闭(如IMMEDIATETRANSACTIONALNORMAL
  • 完全检查点会导致大量IO操作,严重影响性能。因此,Oracle在8i后引入了增量检查点。

    增量检查点

    Oracle从8i开始使用检查点队列来实现增量检查点。检查点队列记录了数据库中所有脏数据块的信息,DBWR根据队列内容将脏数据块写入数据文件。队列中的条目按时间顺序记录,每个条目包含RBA、数据文件号和块号。即使数据块多次修改,队列中的位置保持不变,只记录最早的RBA,确保最早修改的数据块优先写入。

    检查点队列的核心是通过每3秒一次的“心跳”(心跳记录在控制文件中)来更新检查点位置。Oracle提供了四个参数来控制检查点位置和重做日志末尾的距离,这四个参数实际用于控制队列中的条目数量,而不是检查点发生的频率。

    四个关键参数

  • fast_start_io_target

    用于估算Instance Recovery时的IO总数。例如,如果Instance Crash后需要10分钟恢复,假设OS IO速率为500次/秒,总IO次数为30,000次,可以将fast_start_io_target设置为30,000。

  • fast_start_mttr_target

    从9i开始引入,表示Instance Recovery所需的时间(以秒为单位)。例如,设置fast_start_mttr_target为600秒后,fast_start_io_target将失效。

  • log_checkpoint_timeout

    检查点位置与重做日志末尾的时间间隔(默认1800秒)。

  • log_checkpoint_interval

    表示检查点位置与重做日志末尾的重做日志块数量,以OS块为单位。

  • 检查点位置的确定

    除了上述四个参数外,Oracle还会将重做日志文件末尾前90%的位置设为检查点位置。在每个重做日志中,这些位置可能不同,Oracle会选择离日志末尾最近的位置作为实际检查点位置。

    Oracle 9i Instance Recovery

    增量检查点的优势

  • 基于检查点队列

    在9i后,增量检查点通过队列记录脏数据块信息,DBWR按队列顺序写入数据文件。这种机制使得Instance Recovery时可以从队列中的最大RBA开始,而不是从上一次检查点的SCN开始,大大缩短恢复时间。

  • 两次重做日志扫描

    在应用重做日志之前,日志会被扫描以确定哪些记录需要应用。9i新增了DBWR写入日志的信息,使得早期的日志不会被应用。

  • Rollforward和Rollback

    在Instance Recovery时,必须先定位到重做日志并应用所有日志。Rollforward包括提交和未提交的数据。Rollback由smon和on-demand rollback完成,清理未提交的事务。

  • 事务恢复的关键点

  • 数据块更新必然写入回滚段

    数据块更新会记录前镜像,确保恢复时可以重建原有的数据状态。

  • 回滚段的事务状态

    回滚段记录了事务的状态,帮助恢复时识别已提交或未提交的事务。

  • Instance Crash后的恢复流程

    • 根据重做日志重建数据块和回滚段
    • 数据库重新打开后,smon逐步回滚未提交的事务
    • 如果过程中遇到未提交数据,会主动回滚
  • 通过这样的机制,Oracle确保了在Instance Crash后,数据库能够快速恢复到一致状态。

    转载地址:http://eepfk.baihongyu.com/

    你可能感兴趣的文章
    OpenObserve云原生可观测平台本地Docker部署与远程访问实战教程
    查看>>
    openoffice使用总结001---版本匹配问题unknown document format for file: E:\apache-tomcat-8.5.23\webapps\ZcnsDms\
    查看>>
    OpenPPL PPQ量化(4):计算图的切分和调度 源码剖析
    查看>>
    OpenPPL PPQ量化(5):执行引擎 源码剖析
    查看>>
    openpyxl 模块的使用
    查看>>
    OpenResty(nginx扩展)实现防cc攻击
    查看>>
    openresty完美替代nginx
    查看>>
    Openresty框架入门详解
    查看>>
    OpenResty(1):openresty介绍
    查看>>
    OpenResty(2):OpenResty开发环境搭建
    查看>>
    OpenResty(3):OpenResty快速入门之安装lua
    查看>>
    OpenResty(4):OpenResty快速入门
    查看>>
    OpenResty(5):Openresty 模板渲染
    查看>>
    OpenSessionInView模式
    查看>>
    openshift搭建Istio企业级实战
    查看>>
    OpenSLL
    查看>>
    Openssh Openssl升级
    查看>>
    openssh 加固
    查看>>
    ViewPager切换滑动速度修改
    查看>>
    OpenSSL 引入了新的治理模式和项目,来增强社区参与和决策
    查看>>