ITPub博客

首页 > 数据库 > Oracle > 深入浅出检查点和实例recovery

深入浅出检查点和实例recovery

原创 Oracle 作者:dotaddjj 时间:2012-02-02 16:14:58 0 删除 编辑

再次翻看eyle深入浅出,记录关于检查点和实例恢复的一些笔记

oracle 8I的增量检查点主要是通过fast_start checkpointing特性来实现,oracle 8I开始,fast_start checkpointing特性,包含在oracle企业版本的fast_start fault recovery组件中。

该组件还包括fast_start parallel rollback和fast_start on_demand rollback。

fast_start checkpointing特性主要是通过fast_start_mttr_target(instance 恢复期望时间)参数来实现,表示instance crash恢复所需的时间

增量检查点连续地进行,把checkpoint queue中最低的low rba写入disk中(dbwr会根据checkpoint queue的low rba顺序写入到disk),控制文件使用轻量级的控制文件更新协议将最低的low rba写入控制文件,这样不仅可以让rba更接近与数据库的最新状态,减少instance恢复时间,也能平衡常规检查点时的I/O冲突,checkpoint queue中的是按照low rba排序的。如果数据块进行多次修改,此dirty块在checkpoint queue的位置不会改变

SQL> select target_mttr,estimated_mttr,ckpt_block_writes from v$instance_recovery;

TARGET_MTTR ESTIMATED_MTTR CKPT_BLOCK_WRITES

----------- -------------- -----------------

90 50 47

v$instance_recovery视图中的target_mttr表示的是instance恢复的期望时间,而estimated_mttr是根据redo和dirty buffer估算的instance恢复的时间,ckpt_block_writes则是检查点已经写出的数据块的数量,初始化参数fast_start_mttr_target设置较大或较小时,target_mttr参数值可能并不一定等于fast_start_mttr_target参数.

在v$instance视图中如果target_mttr<=estimated_mttr时,系统将会执行检查点。如果在繁忙系统中,target_mttr长时间大于estimated_mttr,很可能是系统正需要执行大规模写出,或者checkpoint incomplete.这时候进一步查看v$log查看checkpoint对于redolog切换检查点是否完成,利用linux的iostat工具查看磁盘I/O等信息,是否因为磁盘的I/O存在瓶颈,导致dbwr写入进程慢,而导致checkpoint没有及时完成,进而导致根据redo和dirty buffer计算而来的estimated_mttr大于target_mttr等。

从oracle 10g开始,数据库可以实现自动调整检查点,oracle数据库使用系统低I/O负载时写出dirty buffer,提高执行效率,设置fast_start_mttr_target=0,自动调整检查点将生效,如果希望严格控制crash恢复时间,可以设置fast_start_mttr_target值,控制instance恢复时间,反之则可以设置fast_start_mttr_target为0而启动10g的自动调整的检查点功能。

数据库异常关闭之后,下次启动时,oracle会自行进行instance recovery,实例恢复又可分为cache recovery和transaction recovery

Cache recovery

读取日志,从最后完成的检查点开始应用redo,这个过程就是前滚rolling forward,也称cache recovery,完成前滚后,数据库可以被打开访问。

Transaction recovery

Oracle回滚未提交的事务,oracle使用两个特性fast_start on_demand rollback和fast_start parallel rollback增加transaction recovery阶段效率,这也就是上面所提的oracle 8I企业版的组件fast_start fault recovery另外两个组成部分。

使用fast-start on-demand rollback特性,oracle允许在打开数据库之后开始新的事务,如果有用户进程访问那些未提交事务的记录,oracle再予以回滚,需要时再予以回滚,在fast-start on-demand rollback中,后台进程smon调度使用多个服务器进程parallel回滚一个事务集。

Fast-start parallel rollback主要对于长时间运行的dml等操作进行事务回滚,smon自动决定何时开始并行回滚并且在多个进程之间分配工作。Fast_start parallel rollback还可以用于内部事务恢复Intra-transaction recovery,在内部事务恢复中,一个大事务可以被拆分,分配给几个服务器进程并行回滚。

可以Fast_start_parallel_rollback来控制并行回滚:

False 禁止fast-start parallel rollback

Low 限制恢复进程不超过2倍的cpu_count

High 限制回顾进程不能超过4被的cpu_count

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25362835/viewspace-1057264/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    220
  • 访问量
    1662975