为什么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) |