首页 > Linux操作系统 > Linux操作系统 > 影响检查点频率的参数
影响检查点频率的参数有多个,介绍如下:
1,log_checkpoint_interval
该参数通过指定增量检查点与最后一次重做日志写之间的重做日志块个数,控制检查点频率.
这里的块指操作系统物理块,而不是数据库块.
无论该参数如何设置,在日志切换时总会发生检查点.所以,如果该参数数值超过了实际的日志文件大小,检查点只会在日志切换时发生.检查点频率是影响系统从故障中恢复时间的因素之一.
*指定该参数为0的效果与设置为无限大的值效果相同,该参数会被忽略.
*限制恢复所需I/O也可以通过设置LOG_CHECKPOINT_TIMEOUT参数或最小的重做日志大小实现.通过查询V$INSTANCE_RECOVERY视图,可以了解到当前控制检查点的是哪种机制.
2,LOG_CHECKPOINT_TIMEOUT
该参数通过指定自从前一次写重做日志文件时的增量检查点所经历的时间(单位秒),控制检查点频率.这意味着,缓存中不存在超过指定时间的脏数据.
设置该值为0禁止了基于时间的检查点.所以,不建议设置该值为0,除非设置了FAST_START_MTTR_TARGET.
*由该参数产生的检查点会在前一个检查点结束后执行.
*限制恢复所需I/O也可以通过设置LOG_CHECKPOINT_INTERVAL参数或最小的重做日志大小实现.通过查询V$INSTANCE_RECOVERY视图,可以了解到当前控制检查点的是哪种机制.
3,LOG_CHECKPOINTS_TO_ALERT
该参数可以控制将检查点记录在alert文件中.
4,FAST_START_MTTR_TARGET
该参数用于指定数据库为了完成崩溃(crash recovery)所需时间(秒).如果设置了LOG_CHECKPOINT_INTERVAL,该参数将被覆盖.
5,V$INSTANCE_RECOVERY
该视图用于查询可用于限制恢复所需I/O的机制,包括:
*LOG_CHECKPOINT_TIMEOUT
*LOG_CHECKPOINT_INTERVAL
*FAST_START_MTTR_TARGET
*最小的重做日志大小
SQL> desc V$INSTANCE_RECOVERY
Name Type Comments
------------------------------ ------ --------
RECOVERY_ESTIMATED_IOS NUMBER buffer cache中的脏块个数
ACTUAL_REDO_BLKS NUMBER 当前恢复所需重做日志块数
TARGET_REDO_BLKS NUMBER 当前恢复所需重做日志块数目标,是后续3列中最小者,同时标识出哪个设定参数生效
LOG_FILE_SIZE_REDO_BLKS NUMBER 由重做日志所确定的恢复所需重做日志块数
LOG_CHKPT_TIMEOUT_REDO_BLKS NUMBER LOG_CHECKPOINT_TIMEOUT确定的恢复所需重做日志块数
LOG_CHKPT_INTERVAL_REDO_BLKS NUMBER LOG_CHECKPOINT_INTERVAL确定的恢复所需重做日志块数
FAST_START_IO_TARGET_REDO_BLKS NUMBER 此列已弃用
TARGET_MTTR NUMBER 基于FAST_START_MTTR_TARGET计算的生效MTTR(mean time to recover,秒),用于内部计算.二者一般一致,在FAST_START_MTTR_TARGET为0或较大(3600)时,则考虑系统极限得到.
ESTIMATED_MTTR NUMBER 基于当前脏块数量和日志块个数,估算的MTTR(mean time to recover,秒),如未设置FAST_START_MTTR_TARGET则为0.
CKPT_BLOCK_WRITES NUMBER 检查点写入的块个数
OPTIMAL_LOGFILE_SIZE NUMBER 根据FAST_START_MTTR_TARGET估算的最优日志文件大小(megabytes)
ESTD_CLUSTER_AVAILABLE_TIME NUMBER 当前实例故障时该集群处于部分可用状态的估计时间(秒)
WRITES_MTTR NUMBER 由FAST_START_MTTR_TARGET触发的写次数
WRITES_LOGFILE_SIZE NUMBER 由最小重做日志大小触发的写次数
WRITES_LOG_CHECKPOINT_SETTINGS NUMBER 由LOG_CHECKPOINT_INTERVAL/LOG_CHECKPOINT_TIMEOUT触发的写次数
WRITES_OTHER_SETTINGS NUMBER 由其他原因触发的写次数(如被弃用的参数FAST_START_IO_TARGET)
WRITES_AUTOTUNE NUMBER 由自动调整检查点(auto-tune checkpointing)触发的写次数
WRITES_FULL_THREAD_CKPT NUMBER 由全量检查点(full thread checkpoints)触发的写次数
6,测试
--版本
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
--缺省设置
SQL> show parameter checkpoint
NAME TYPE VALUE
------------------------------------ -------------------------------- ------------------------------
log_checkpoint_interval integer 0
log_checkpoint_timeout integer 1800
log_checkpoints_to_alert boolean FALSE
SQL> show parameter fast
NAME TYPE VALUE
------------------------------------ -------------------------------- ------------------------------
fast_start_io_target integer 0
fast_start_mttr_target integer 0
fast_start_parallel_rollback string LOW
--测试log_checkpoints_to_alert
SQL>
SQL> alter system checkpoint;
System altered.
==〉alert_rocl.log中无记录
SQL> alter system set log_checkpoints_to_alert=true;
System altered.
==〉alert_rocl.log:
Wed Jan 23 14:53:12 2013
ALTER SYSTEM SET log_checkpoints_to_alert=TRUE SCOPE=BOTH;
SQL> alter system checkpoint;
System altered.
==〉alert_rocl.log:
Wed Jan 23 14:53:24 2013
Beginning global checkpoint up to RBA [0x48.4c.10], SCN: 258943
Completed checkpoint up to RBA [0x48.4c.10], SCN: 258943
--测试LOG_CHECKPOINT_TIMEOUT
SQL> alter system set LOG_CHECKPOINT_TIMEOUT=120;
System altered.
==〉alert_rocl.log:
ALTER SYSTEM SET log_checkpoint_timeout=120 SCOPE=BOTH;
Wed Jan 23 14:56:30 2013
Incremental checkpoint up to RBA [0x48.4c.0], current log tail at RBA [0x48.4c.0]
SQL> select recovery_estimated_ios ios,
actual_redo_blks a_rb,
target_redo_blks t_rb,
log_file_size_redo_blks fs_rb,
log_chkpt_timeout_redo_blks tout_rb,
log_chkpt_interval_redo_blks itv_rb
from V$INSTANCE_RECOVERY;
IOS A_RB T_RB FS_RB TOUT_RB ITV_RB
---------- ---------- ---------- ---------- ---------- ----------
219 871 871 184320 871
==〉T_RB=TOUT_RB,当前redo target由LOG_CHECKPOINT_TIMEOUT控制
==〉
log_checkpoint_timeout参数值太小,导致频繁增量检查点,可以在alert_rocl.log中看到大约2分钟出现一次增量检查点。
Wed Jan 23 14:56:30 2013
Incremental checkpoint up to RBA [0x48.4c.0], current log tail at RBA [0x48.4c.0]
Wed Jan 23 14:58:57 2013
Incremental checkpoint up to RBA [0x48.4c.0], current log tail at RBA [0x48.51.0]
Wed Jan 23 15:01:24 2013
Incremental checkpoint up to RBA [0x48.52.0], current log tail at RBA [0x48.3b3.0]
Wed Jan 23 15:04:21 2013
Incremental checkpoint up to RBA [0x48.3c1.0], current log tail at RBA [0x48.3c1.0]
SQL> alter system set log_checkpoint_timeout=1800;
System altered.
--测试log_checkpoint_interval
SQL> select bytes from v$log;
BYTES
----------
52428800
52428800
52428800
SQL> alter system set log_checkpoint_interval=100;
System altered.
==〉alert_rocl.log:
Wed Jan 23 15:33:54 2013
ALTER SYSTEM SET log_checkpoint_interval=100 SCOPE=BOTH;
SQL> select recovery_estimated_ios ios,
actual_redo_blks a_rb,
target_redo_blks t_rb,
log_file_size_redo_blks fs_rb,
log_chkpt_timeout_redo_blks tout_rb,
log_chkpt_interval_redo_blks itv_rb
from V$INSTANCE_RECOVERY;
2 3 4 5 6 7
IOS A_RB T_RB FS_RB TOUT_RB ITV_RB
---------- ---------- ---------- ---------- ---------- ----------
9 6 100 184320 1068 100
==〉T_RB=ITV_RB,当前redo target由log_checkpoint_interval控制
SQL> insert into ttt select * from ttt;
39092 rows created.
SQL> commit;
Commit complete.
SQL> select sid from v$mystat where rownum<2;
SID
----------
1190
SQL> insert into ttt select * from ttt;
78184 rows created.
SQL> SQL> r
1* insert into ttt select * from ttt
156368 rows created.
==〉alert_rocl.log:
Wed Jan 23 15:46:05 2013
Incremental checkpoint up to RBA [0x48.df13.0], current log tail at RBA [0x48.df32.0]
Wed Jan 23 15:49:39 2013
Beginning log switch checkpoint up to RBA [0x49.2.10], SCN: 262202
Thread 1 advanced to log sequence 73
Current log# 2 seq# 73 mem# 0: /u01/app/oracle/oradata/orcl1/redo02.log
Current log# 2 seq# 73 mem# 1: /u01/app/oracle/oradata/orcl2/redo02a.dbf
Wed Jan 23 15:49:44 2013
Completed checkpoint up to RBA [0x49.2.10], SCN: 262202
在操作前后redo size超过24MB,怎么与log_checkpoint_interval=100对应?
SQL> select n.name, s.value
from v$sesstat s, v$statname n
where n.name in ('redo blocks written', 'redo size')
and s.STATISTIC# = n.STATISTIC#
and s.sid = 1190; 2 3 4 5
NAME VALUE
---------------------------------------------------------------- ----------
redo size 27677332
redo blocks written 0
SQL> r
1 select n.name, s.value
2 from v$sesstat s, v$statname n
3 where n.name in ('redo blocks written', 'redo size')
4 and s.STATISTIC# = n.STATISTIC#
5* and s.sid = 1190
NAME VALUE
---------------------------------------------------------------- ----------
redo size 51817000
redo blocks written 0
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/18922393/viewspace-753135/ ,如需转载,请注明出处,否则将追究法律责任。