checkpoint是什么(zt)

本文详细介绍了Oracle数据库中的checkpoint机制,包括完全检查点和增量检查点的定义、作用、触发条件以及相关视图,展示了如何通过实验观察和分析checkpoint的过程,帮助理解数据库一致性保证和实例恢复原理。
摘要由CSDN通过智能技术生成

checkpoint是什么?
checkpoint是数据库的一个内部事件,
这个事件激活以后会触发数据库写进程(DBWR)将数据缓冲(DATA BUFFER CACHE)中的脏数据块写出到数据文件中。
checkpoint的作用是什么?
checkpoint主要2个作用:1、保证数据库的一致性,
这是指将脏数据写出到硬盘,保证内存和硬盘上的数据是一样的;
2、缩短实例恢复的时间,实例恢复要把实例异常关闭前没有写出到硬盘的脏数据通过日志进行恢复。
如果脏块过多,实例恢复的时间也会很长,检查点的发生可以减少脏块的数量,从而提高实例恢复的时间。
checkpoint就像word的自动保存一样。
checkpoint的类型:
完全检查点:
定义:清除脏列表(DIRTY LIST OR CHECKPOINT ENQUEUE)中所有数据块。
什么时候发生:ALTER SYSTEM CHECKPOINT; SHUTDOWN; 


增量检查点:
定义:根据检查点的条件清除脏列表中的部分数据块,直到满足所有检查点条件为止。
什么时候发生:CKPT进程每3秒被唤醒,CKPT检查当前的所有checkpoint条件,
如果任何一个条件不能被满足,那么CKPT发出增量检查点。
检查点条件有哪些?
90% OF THE SMALLEST REDO LOGFILE
FAST_START_MTTR_TARGET
FAST_START_IO_TARGET
LOG_CHECKPOINT_TIMEOUT
LOG_CHECKPOINT_INTERVAL
90% OF THE SMALLEST REDO LOGFILE :
意味着最后一次增量检查点与当前日志文件末尾所差的redo block数量如果超过最小redo log的90%,那么就会触发增量检查点。
FAST_START_MTTR_TARGET:实例恢复的时间限制,
oracle将这个时间换算成redo blocks数量,当log buffer中未写入log file的redo block数量超过这个值,就会触发增量检查点。
FAST_START_IO_TARGET:实例恢复所需要读取的redo blocks数量,
当log buffer中未写入log file的redo block数量超过这个值,就会触发增量检查点。
LOG_CHECKPOINT_TIMEOUT:2次增量检查点的时间间隔。
LOG_CHECKPOINT_INTERVAL:最后一次增量检查点与当前日志文件末尾所差的redo block数量。
注意:增量检查点并不是将脏列表中的所有脏块都写出到数据文件中,而是写出一部分,保证满足所有条件即可。
 
 
相关概念:RBA checkpoin rba on-disk rba RBA:redo block address 重作日志地址
logfile sequence number(4bytes)
logfile block number(4bytes)
redo entry offset(2bytes)
checkpoint rba:最后一次检查点对应的重作日志地址,意味着这个地址之前的redo log都是实例恢复不需要的。
实例恢复的起点
on-disk rba:当前日志中最新的重作日志地址。
实例恢复的终点
相关视图:x$kcccp v$instance_recovery v$instance_recovery实例恢复对应的视图:
actual_redo_blks:最后一次检查点到当前日志尾所差的redo blocks数量;
target_redo_blks:所有检查点条件中最小的条件相差的redo blocks数量;
log_file_size_redo_blks:最小日志组的90%大小所对应的redo blocks数量;--这是一个增量检查点条件
log_chkpt_timeout_redo_blks:有log_checkpoint_timeout参数所转换的redo blocks数量; --这也是一个增量检查点条件
target_mttr:有fast_start_mttr_target参数所限制的实例恢复的最大时间
estimated_mttr:根据当前最后一次检查点与日志尾所差的redo blocks数量估算出来的mttr。
x$kcccp 增量检查点对应的视图:
CPLRBA_SEQ:最后一次增量检查点对应rba的第一部分--日志序列号;
CPLRBA_BNO:最后一次增量检查点对应rba的第二部分--日志块数;
CPLRBA_BOF:最后一次增量检查点对应rba的第三部分--日志偏移量;
CPODR_SEQ:日志尾的rda的第一部分--日志序列号;
CPODR_BNO:日志尾的rda的第二部分--日志块数;
CPODR_BOF:日志尾的rda的第二部分--日志偏移量;
CPHBT:检查点心跳数。

实验测试:
1、完全检查点:
SQL> show parameter log_checkpoint_
NAME TYPE VALUE
------------------------------------ ---------------------- --------
log_checkpoint_interval integer 0
log_checkpoint_timeout integer 0
log_checkpoints_to_alert boolean TRUE
SQL> alter system checkpoint;
系统已更改。
日志中的信息:完全检查点立即执行。
Beginning global checkpoint up to RBA [0x52f.5c2.10], SCN: 0x0000.0045bf00
Completed checkpoint up to RBA [0x52f.5c2.10], SCN: 0x0000.0045bf00
从v$instance_recovery 中看到actual_redo_blks瞬间为0,说明完全检查点清除脏列表上的所有的脏块。
同时也会完成之前没有完成的日志切换检查点,这时查询v$log,active的状态转变为inactive。
第1个窗口
SQL> alter system checkpoint;
系统已更改。
第2个窗口
10:24:54 SQL> select actual_redo_blks from v$instance_recovery;
ACTUAL_REDO_BLKS
----------------
128
10:25:09 SQL> /
ACTUAL_REDO_BLKS
----------------
128
10:25:11 SQL> /
ACTUAL_REDO_BLKS
----------------
0
10:25:45 SQL>
此时查看警报日志:
Beginning global checkpoint up to RBA [0x531.8f.10], SCN: 0x0000.00461fd1
Completed checkpoint up to RBA [0x531.8f.10], SCN: 0x0000.00461fd1
531转成十进制就是1329,是当前的在线日志序列号:
SQL> select group#,sequence#,status from v$Log;
GROUP# SEQUENCE# STATUS
---------- ---------- ---------------------------
4 1328 INACTIVE
5 1329 CURRENT
6 1327 INACTIVE
SQL> alter system dump logfile 'D:ORACLEORADATATEST9REDO05.LOG';
系统已更改。
转储日志,找到对应的rba
REDO RECORD - Thread:1 RBA: 0x000531.0000008f.0010 LEN: 0x0428 VLD: 0x02
SCN: 0x0000.00461fd1 SUBSCN: 1 12/05/2006 10:25:43
CHANGE #1 MEDIA RECOVERY MARKER SCN:0x0000.00000000 SEQ: 0 OP:23.1
Block Written - afn: 1 rdba: 0x00403162(1,12642)
scn: 0x0000.00461f88 seq: 0x01 flg:0x06
Block Written - afn: 1 rdba: 0x00403159(1,12633)
scn: 0x0000.00461f88 seq: 0x01 flg:0x06
Block Written - afn: 1 rdba: 0x00403158(1,12632)
scn: 0x0000.00461f88 seq: 0x01 flg:0x06
Block Written - afn: 1 rdba: 0x0040314b(1,12619)
scn: 0x0000.00461f88 seq: 0x01 flg:0x06
Block Written - afn: 1 rdba: 0x0040314a(1,12618)
scn: 0x0000.00461f88 seq: 0x01 flg:0x06
Block Written - afn: 1 rdba: 0x00403149(1,12617)
scn: 0x0000.00461f88 seq: 0x01 flg:0x06
Block Written - afn: 1 rdba: 0x00401efa(1,7930)
scn: 0x0000.00461fca seq: 0x01 flg:0x06
Block Written - afn: 1 rdba: 0x00401eba(1,7866)
scn: 0x0000.00461fcc seq: 0x01 flg:0x06
Block Written - afn: 1 rdba: 0x00401387(1,4999)
scn: 0x0000.00461f88 seq: 0x01 flg:0x06
Block Written - afn: 1 rdba: 0x00401386(1,4998)
scn: 0x0000.00461f88 seq: 0x01 flg:0x06
Block Written - afn: 1 rdba: 0x00401373(1,4979)
scn: 0x0000.00461f88 seq: 0x01 flg:0x06
Block Written - afn: 1 rdba: 0x00401372(1,4978)
scn: 0x0000.00461f88 seq: 0x01 flg:0x06
Block Written - afn: 1 rdba: 0x00401370(1,4976)
scn: 0x0000.00461f88 s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值