Chinaunix首页 | 论坛 | 博客
  • 博客访问: 518625
  • 博文数量: 101
  • 博客积分: 1635
  • 博客等级: 上尉
  • 技术积分: 1282
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-05 01:51
文章分类

全部博文(101)

文章存档

2019年(2)

2018年(16)

2013年(14)

2012年(69)

我的朋友

分类: Oracle

2018-11-27 13:51:02

为什么oracle要引入检查点机制?
降低实例恢复的时间


通过实验来简单观察下checkpoint


SQL> select file#,checkpoint_change# from v$datafile order by 1;


     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            7642610
         2            7642610
         4            7642610
         5            7642610
         6            7642610


SQL> c/datafile/datafile_header
  1* select file#,checkpoint_change# from v$datafile_header order by 1
SQL> /


     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            7642610
         2            7642610
         4            7642610
         5            7642610
         6            7642610


SQL> alter system checkpoint;


System altered.


SQL> select file#,checkpoint_change# from v$datafile order by 1;


     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            7649054
         2            7649054
         4            7649054
         5            7649054
         6            7649054


SQL> select file#,checkpoint_change# from v$datafile_header order by 1;


     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            7649054
         2            7649054
         4            7649054
         5            7649054
         6            7649054


SQL> alter system set log_checkpoints_to_alert=true; ----通过设置该参数,可以将检查点信息输出到alert log中
ALTER SYSTEM SET log_checkpoints_to_alert=TRUE SCOPE=BOTH;
Mon Nov 19 11:00:33 2018
Beginning log switch checkpoint up to RBA [0x133.2.10], SCN: 7649105
Thread 1 advanced to log sequence 307 (LGWR switch)
  Current log# 1 seq# 307 mem# 0: /u01/app/oracle/oradata/orcl/redo01.log
Mon Nov 19 11:00:33 2018


全局检查点
    alter system checkpoint global;(这个针对rac而言,相对local方式来讲,更为复杂,因为其需要保证一致性)


实际单机环境也存在这个说法。
1、full checkpoint
2、 thread checkpoint(loacal checkpoint,global checkpoint)
3 datafile checkpoint
4 mini-checkpoint(object checkpoint 基于DDL)
5 parallel query checkpoint
6 incremental checkpoint(log switch checkpoint)


从oracle9i R2版本,引入了如下一个参数:


SQL> show parameter fast_start_mttr_target


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
fast_start_mttr_target               integer     0


实例恢复的时间
实际上oracle一直在优化这个操作,所以在oracle 10g又引入了检查点自动调节机制。
所以,在10g版本中,我们不需要再去设置 show parameter fast_start_mttr_target参数了。


_disable_selftune_checkpointing false--- oracle是通过这个隐含参数来控制检查点的自动调节(默认开启)


oracle也提供了视图供我们进行判断实例恢复所需要的时间:
 select  tt.ACTUAL_REDO_BLKS,tt.TARGET_REDO_BLKS,tt.TARGET_MTTR,tt.ESTIMATED_MTTR,tt.WRITES_AUTOTUNE  from v$instance_recovery tt 
65304 371631 0 10 156624553


target_mttr值是做什么,实际上这个值是基于fast_start_mttr_target计算出来的一个估算值。
如果说,当fast_start_mttr_target没有设置,实际上这个估计值就等于当前估算出来的mttr值。
ESTIMATED_MTTR 就是oracle自己估算出来的实例恢复所需要的时间。(实际上是根据cache buffer中的脏块数据和redo block个数来估算的,如果fast_start_mttr_target参数没有设置的话
。如果设置了,那么久根据fast_start_mttr_target来进行估算)

通俗点讲,就是该点以及该点之前所有脏块都要被写入到disk中。其实我认为,就理解为检查点就是一种机制,触发dbwr去写脏块的机制就行了。
阅读(6472) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~