在Oracle里面,检查点分为两种:完全检查点和增量检查点。
1、完全检查点(full checkpoint)
在Oracle8i之前,数据库的发生的检查点都是完全检查点,完全检查点会将数据缓冲区里面所有的脏数据块写入相应的数据文件中,并且同步数据文件头和控制文件,保证数据库的一致。完全检查点在8i之后只有在下列两种情况下才会发生:
(1、)DBA手工执行alter systemcheckpoint的命令;
(2、)数据库正常shutdown(immediate,transcational,normal)。
由于完全检查点会将所有的脏数据库块写入,巨大的IO往往会影响到数据库的性能。因此Oracle从8i开始引入了增量检查点的概念。
2、增量检查点 (incrementalcheckpoint)
检查点队列,用于记录数据库里面当前所有的脏数据块的信息,DBWR 根据这个队列而将脏数据块写入到数据文件中。检查点队列按时间先后记录着数据库里面脏数据块的信息,里面的条目包含RBA(Redo Block Address),重做日志里面用于标识检查点期间数据块在重做日志里面第一次发生更改的编号)和数据块的数据文件号和块号。
在检查点期间不论数据块更改几次,它在检查点队列里面的位置始终保持不变,检查点队列也只会记录它最早的RBA,从而保证最早更改的数据块能够尽快写入。当DBWR将检查点队列里面的脏数据块写入到数据文件后,检查点的位置也要相应地往后移,CKPT每三秒会在控制文件中记录检查点的位置,以表示Instance Recovery时开始恢复的日志条目,这个概念称为检查点的“心跳”(heartbeat)。
注意:增量检查点并不去更新数据文件头,只是在控制文件中记录了checkpoint progress record这个区域,记下lowrba,on-disk rba等信息。这些信息就可以用来快速恢复。
每隔3秒钟ckpt会去更新控制文件中的checkpoint progress recored区域,记录checkpoint执行的情况。
解疑:这里应该是只更新控制文件,每3秒不是更新数据文件头,而是在控制文件中记录checkpoint的执行情况,基于增量检查点和checkpoint queue的原理,在发生检查点的时候,ckpt 进程每次只是告诉dbwr,写dirty buffe要一直写到最新这个位置(发生检查点:也就是alter system checkpoint),这样做呢,仅仅是告诉dbwr一个checkpoint queue中的结束点,ckpt绝对不会等到dbwr写完所有脏数据在更新控制文件和数据文件头,而是每3秒钟,在控制文件中的checkpoint progress recored区域中报告一下dbwr最新写入的位置(也就是dbwr的写状态的scn)。这样使得,比如数据库要做恢复的时候(instance recovery)可以从这个最新报告的scn位置开始做恢复,而不是从数据文件中的checkpoint scn开始做恢复,这样将缩短恢复时间,尤其是instance crash的情况下启动更快。另外要注意的是,检查点发生的时候,ckpt 去更新数据文件头和控制文件,并不是把当前检查点发生时候的scn 更新进去,而是把上一次dbwr写入已经完成的检查点发生时候的 scn 更新进去,也就是说,更新控制文件和数据文件头是滞后于检查点的发生的,这个从恢复的原理也很容易理解,因为检查点发生的时候dirtybuffer还没有写入,自然不能立即更新成当前的scn了。
检查点位置发生变更后,Oracle里面通过4个参数用于控制检查点位置和最后的重做日志条目之间的距离。在这里面需要指出的是,多数人会将这4个参数看作控制增量检查点发生的时间。事实上这是错误的,这4个参数是用于控制检查点队列里面的条目数量,而不是控制检查点的发生。
(1)fast_start_io_target
该参数用于表示数据库发生Instance Recovery的时候需要产生的IO总数,它通过v$filestat的AVGIOTIM来估算的。比如我们一个数据库在发生Instance Crash后需要在10分钟内恢复完毕,假定OS的IO每秒为500个,那么这个数据库发生Instance Recovery的时候大概将产生500*10*60=30000次IO,也就是我们将可以把fast_start_io_target设置为 30000。
(2)fast_start_mttr_target
我们从上面可以看到fast_start_io_target来估算检查点位置比较麻烦。Oracle为了简化这个概念,从9i开始引入了 fast_start_mttr_target这么一个参数,用于表示数据库发生InstanceRecovery的时间,以秒为单位。这个参数我们从字面上也比较好理解,其中的mttr是mean time to recovery的简写,如上例中的情况我们可以将fast_start_mttr_target设置为600。当设置了 fast_start_mttr_target后,fast_start_io_target这个参数将不再生效,从9i后fast_start_io_target这个参数被Oracle废除了。
(3)log_checkpoint_timeout
该参数用于表示检查点位置和重做日志文件末尾之间的时间间隔,以秒为单位,默认情况下是1800秒。
(4)log_checkpoint_interval
该参数是表示检查点位置和重做日志末尾的重做日志块的数量,以OS块表示。
(5)90% OFSMALLEST REDO LOG
除了以上4个初始化参数外,Oracle内部事实上还将重做日志文件末尾前面90%的位置设为检查点位置。在每个重做日志中,这么几个参数指定的位置可能不尽相同,Oracle将离日志文件末尾最近的那个位置确认为检查点位置。
分享到:
相关推荐
对于oracle 检查点的分析,有助于了解oracle checkpoint的基础理论。
ORACLE中的checkpoint
Linux中检查点(Checkpoint)的核心支持——ckpt文件系统的设计.pdf
oracle的checkpoint工作原理
Oracle checkpoint 原理解说,主要讲解checkpoint作用和原理
( OCP OCA认证考试指南全册 ORACLE DATABASE 11G(1Z0-051,1Z0-052,1Z0-053)_12733346.pdf )
oracle checkpointoracle checkpointoracle checkpointoracle checkpoint
Checkpoint 基础运维手册,如何配置Checkpoint基础运维手册防火墙和日常运维手册。
关于oracle checkpoint 的 经典解释。
第八章: 检查点 checkpoint 第九章:实例恢复机制 第二部分:Oracle存储架构 第十章: 数据字典和动态视图 第十一章:Oracle的存储架构 第十二章:Oracle中表的几种类型 第十三章:数据库审计 audit 第十四章:数据...
CheckPoint防火墙Nat配置讲解
QTP入门-检查点输出值参数化 录像 检查点 输出值 参数化 同步点 1.检查点 目的: 检查点比较指定属性的当前值与期望值,以判断当前的程序(或站点)功能是否正常。 在密码正确的情况下预期结果是进入主界面,检查...
checkpoint-DOM:检查点DOM
CheckPoint\Checkpoint防火墙命令行维护手册
检查点的1.0版是主要的重构/重写,旨在解决许多长期存在的问题。 您可以通过或来提供反馈。 检查点功能 使用checkpoint包,您可以轻松地: 从特定时间点开始使用包版本编写R脚本或项目; 编写使用较旧版本的程序...
CheckPoint 4800 CPU 资源分配 CheckPoint 4800 CPU 资源分配 CheckPoint 4800 CPU 资源分配
checkpoint UTM实施指南
checkpoint ccse
Checkpoint防火墙命令行维护手册.pdf
1.检查点 保存模型并不限于在训练模型后,在训练模型之中也需要保存,因为TensorFlow训练模型时难免会出现中断的情况,我们自然希望能够将训练得到的参数保存下来,否则下次又要重新训练。 这种在训练中保存模型,...