oracle checkpoint作用释疑2


5. 增量检查点

关于增量检查点,是本文需要描述的重点,增量检查点其实是在oracle 8i就引入了,引入的目的
当然是为了更大程度的降低instance crash时的recover time。

说道增量检查点,我们就需要讲讲其相关的一个重要结构,那就是checkpoint queue。

当然,checkpoint queue并不仅仅是为增量检查点服务的,也包括其他类型的检查点。
> SELECT CPLRBA_SEQ,CPLRBA_BNO,CPLRBA_BOF,CPODR_SEQ,CPODR_BNO,CPODR_BOF,CPODS FROM x$kcccp;

CPLRBA_SEQ CPLRBA_BNO CPLRBA_BOF CPODR_SEQ CPODR_BNO CPODR_BOF CPODS
———- ———- ———- ———- ———- ———- —————-
9 1303 0 9 1312 0 916350
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0

8 ROWS selected.

‘++++++ 相关字段的解释如下:++++++'

low rba OF cache:
CPLRBA_SEQ log seq #
CPLRBA_BNO block # IN log file
CPLRBA_BOF byte offset IN block

ON disk rba:
CPODR_SEQ log seq #
CPODR_BNO block # IN log file
CPODR_BOF byte offset IN block
CPODS ON disk scn

> SELECT rtckp_rba_seq,rtckp_rba_bno,rtckp_rba_bof,rtckp_scn FROM x$kccrt;

RTCKP_RBA_SEQ RTCKP_RBA_BNO RTCKP_RBA_BOF RTCKP_SCN
————- ————- ————- —————-
9 2 16 915739

‘++++++ 相关字段解释如下:++++++'

RTCKP_RBA_SEQ log seq #
RTCKP_RBA_BNO block # IN log file
RTCKP_RBA_BOF byte offset IN block
RTCKP_SCN checkpoint scnBBED> set file 1 block 1

FILE# 1
BLOCK# 1

BBED> p kcvfhckp

struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x000df91b ==> 转换为10进制为915739
ub2 kscnwrp @488 0x0000
ub4 kcvcptim @492 0x2db07b87
ub2 kcvcpthr @496 0x0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0x00000009 ==> rba_seq
ub4 kcrbabno @504 0x00000002 ==> rba_bno
ub2 kcrbabof @508 0x0010 ==> rba_bof
ub1 kcvcpetb[0] @512 0x02
ub1 kcvcpetb[1] @513 0x00
ub1 kcvcpetb[2] @514 0x00
ub1 kcvcpetb[3] @515 0x00
ub1 kcvcpetb[4] @516 0x00
ub1 kcvcpetb[5] @517 0x00
ub1 kcvcpetb[6] @518 0x00
ub1 kcvcpetb[7] @519 0x00
下面switch logfile一下, 看看结果:
> SELECT file#,CHECKPOINT_CHANGE# FROM v$datafile_header ORDER BY 1;

FILE# CHECKPOINT_CHANGE#
———- ——————
1 915739
2 915739
3 915739
4 915739
5 915747
6 915747

6 ROWS selected.

> ALTER system checkpoint;

System altered.

> SELECT file#,CHECKPOINT_CHANGE# FROM v$datafile_header ORDER BY 1;

FILE# CHECKPOINT_CHANGE#
———- ——————
1 916589
2 916589
3 916589
4 916589
5 916589
6 916589

6 ROWS selected.

SQL> SET LINES 200
SQL> SELECT * FROM v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
———- ———- ———- ———- ———- — —————- ————- ———
1 1 7 52428800 1 NO INACTIVE 872908 03-NOV-11
2 1 8 52428800 1 NO INACTIVE 901680 05-NOV-11
3 1 9 52428800 1 NO CURRENT 915739 06-NOV-11

SQL> ALTER system switch logfile;

System altered.

SQL> SELECT * FROM v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
———- ———- ———- ———- ———- — —————- ————- ———
1 1 10 52428800 1 NO CURRENT 916611 07-NOV-11
2 1 8 52428800 1 NO INACTIVE 901680 05-NOV-11
3 1 9 52428800 1 NO INACTIVE 915739 06-NOV-11

SQL> SELECT file#,CHECKPOINT_CHANGE# FROM v$datafile_header ORDER BY 1;

FILE# CHECKPOINT_CHANGE#
———- ——————
1 916611
2 916611
3 916611
4 916611
5 916611
6 916611

6 ROWS selected.

SQL> SELECT * FROM v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
———- ———- ———- ———- ———- — —————- ————- ———
1 1 10 52428800 1 NO CURRENT 916611 07-NOV-11
2 1 8 52428800 1 NO INACTIVE 901680 05-NOV-11
3 1 9 52428800 1 NO INACTIVE 915739 06-NOV-11

SQL> ALTER system switch logfile;

System altered.

SQL> SELECT file#,CHECKPOINT_CHANGE# FROM v$datafile_header ORDER BY 1;

FILE# CHECKPOINT_CHANGE#
———- ——————
1 916663
2 916663
3 916663
4 916663
5 916663
6 916663

6 ROWS selected.

SQL> SELECT rtckp_rba_seq,rtckp_rba_bno,rtckp_rba_bof,rtckp_scn FROM x$kccrt;

RTCKP_RBA_SEQ RTCKP_RBA_BNO RTCKP_RBA_BOF RTCKP_SCN
————- ————- ————- —————-
11 2 16 916663

‘++++++ 我们可以看到虽然把logfile switch归为增量检查点,其实datafile header也是被更新了。++++++'

SQL> SELECT rtckp_rba_seq,rtckp_rba_bno,rtckp_rba_bof, rtckp_scn FROM x$kccrt;

RTCKP_RBA_SEQ RTCKP_RBA_BNO RTCKP_RBA_BOF RTCKP_SCN
————- ————- ————- —————-
11 2 16 916663

SQL> ALTER tablespace roger offline;

Tablespace altered.

SQL> SELECT rtckp_rba_seq,rtckp_rba_bno,rtckp_rba_bof, rtckp_scn FROM x$kccrt;

RTCKP_RBA_SEQ RTCKP_RBA_BNO RTCKP_RBA_BOF RTCKP_SCN
————- ————- ————- —————-
11 2 16 916663
我们可以看到,对于alter tablespace xxx offline操作,触发的是增量检查点。
BBED> set file 5 block 1

FILE# 5
BLOCK# 1

BBED> p kcvfhckp

struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x000dfd78 ==> 916663
ub2 kscnwrp @488 0x0000
ub4 kcvcptim @492 0x2db08628
ub2 kcvcpthr @496 0x0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0x0000000b ==> 11
ub4 kcrbabno @504 0x00000015
ub2 kcrbabof @508 0x0010
ub1 kcvcpetb[0] @512 0x02
ub1 kcvcpetb[1] @513 0x00
ub1 kcvcpetb[2] @514 0x00
ub1 kcvcpetb[3] @515 0x00
ub1 kcvcpetb[4] @516 0x00
ub1 kcvcpetb[5] @517 0x00
ub1 kcvcpetb[6] @518 0x00
ub1 kcvcpetb[7] @519 0x00
如果想关闭增量检查点功功能,可以调整参数_disable_incremental_checkpoints 为true。

最后回到网友的上来,如下:

获思(280770144) 10:40:34
checkpoint 的rba 排序是从大到小,还是从小到大呢?

东东堂(327356330) 10:41:28
只是说排序,好像没有说从大到小,还是从小到大

既然说道checkpoint rba,那么我们就需要先来了解下rba的结构,其实在上面的实验中
就已经给出了rba的结构:

Checkpoint RBA = RTCKP_RBA_SEQ + RTCKP_RBA_BNO + RTCKP_RBA_BOF

在10g中,checkpoint rba一个占据12 bytes,换句话说,将上面三部分组成在一起就构成
我们所需要的RBA地址,如下;
SQL> col low_rba FOR a30
SQL> col on_disk_rba FOR a30
SQL> SELECT cpdrt,
2 cplrba_seq || ‘.' || cplrba_bno || ‘.' || cplrba_bof “low_rba”,
3 cpodr_seq || ‘.' || cpodr_bno || ‘.' || cpodr_bof “on_disk_rba”
4 FROM x$kcccp;

CPDRT low_rba on_disk_rba
———- —————————— ——————————
258 11.55.0 11.1050.0
0 0.0.0 0.0.0
0 0.0.0 0.0.0
0 0.0.0 0.0.0
0 0.0.0 0.0.0
0 0.0.0 0.0.0
0 0.0.0 0.0.0
0 0.0.0 0.0.0

8 ROWS selected.

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《oracle checkpoint作用释疑2
本文地址:https://www.zhiletu.com/archives-453.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微