没有必胜的秘籍,没有方程式遵循~~
要赢~~只有全身心的投入!
晶晶实验十之再论检查点篇
上一篇 / 下一篇 2008-03-03 21:10:39 / 个人分类:晶晶oracle实验系列
查看( 722 ) /
评论( 42 )
晶晶实验十之再论检查点篇
.F1B&Hi2f S0?0MOi|1E0
%v;z&V L,NI-c0 在晶晶实验九中,主要讲述了增量检查点,他属于检查点的一种,除了增量检查点之外,还有完全检查点和切换日志检查点.下面分别论述一下.ITPUB个人空间`Y,u@9jF7x&Qy
ITPUB个人空间|2A/N%Ml-K UK
1,增量检查点,
j}.i;x/j|0 增量检查点所涉及的主要概念,是一个队列一个进程.队列是检查点队列,进程是CKPT进程.CKPT进程有两项任务,一个是在一定的时机触发DBWR并告知DBWR的Target RBA,另一个任务是每3秒一次将DBWR的写进度更新到控制文件中.CKPT的这两个任务合在一起,叫做--增量检查点.通常所说的触发增量检查点,是指CKPT进程通知DBWR刷新脏块这个操作.ITPUB个人空间;B6f4q'IZ_*KH5{P
在10g中把 log_checkpoint_to_alert设置为真,可以在告警日志中观察到增量检查点的触发.在9I中看不到增量检查点,可以看到其他检查点的触发信息.
s iBWS([w0 ITPUB个人空间 QCg,^ `Kd+lt
观察增量检查点:
6A.{5\gxr;@4W0 步骤1:ITPUB个人空间"P.U#^.Cl
SQL> alter system set log_checkpoints_to_alert=true;
d a}4@'~/j0na |0 ITPUB个人空间(^u?3u4SR_ O
系统已更改。ITPUB个人空间8ah0|WQm'`{k3|0N
#I7r5H[^A;w0 步骤2:将增量检查点的切换频率定为300秒. ITPUB个人空间-r B4J j|Or b6W V
SQL> alter system set log_checkpoint_timeout=300;[单位是秒]ITPUB个人空间2n7{-yl![7ut
ITPUB个人空间lmw;r#} LR
系统已更改。ITPUB个人空间:e*w-V6n*[ ?{\
ITPUB个人空间"SUs{.dR9k#h)w
步骤3:查看告警日志中的增量检查点信息.
b aUc9f*i0 ...
XL!m1n%c0 Incremental checkpoint up to RBA [0x2b9.747.0], current log tail at RBA [0x2b9.848.0]ITPUB个人空间tWi }8a
Mon Mar 03 14:51:40 2008ITPUB个人空间7weOms1vg
Incremental checkpoint up to RBA [0x2b9.855.0], current log tail at RBA [0x2b9.876.0]
?@!m1Yv-`&E8d0 Mon Mar 03 14:56:43 2008
4NV-aUl*k W0 Incremental checkpoint up to RBA [0x2b9.877.0], current log tail at RBA [0x2b9.8f0.0]ITPUB个人空间e#Z}S2cb
Mon Mar 03 15:01:43 2008ITPUB个人空间j#d)o \V
Incremental checkpoint up to RBA [0x2b9.8f5.0], current log tail at RBA [0x2b9.d70.0]ITPUB个人空间%i7rN4h-B(gh2K
Mon Mar 03 15:06:43 2008ITPUB个人空间"~Ecx%D
Incremental checkpoint up to RBA [0x2b9.d74.0], current log tail at RBA [0x2b9.fd9.0]ITPUB个人空间3~5If%z!k,S[8V
Mon Mar 03 15:11:44 2008
HXd$tF;L0 ...ITPUB个人空间k|-j;|,].R
注:Incremental checkpoint(增量检查点的意思)/第1个RBA(增量检查点发生时当前的检查点位置)/第2个RBA(检查点发生时的当前的on disk rba);
$`6L-{"ql$e/G0 ITPUB个人空间#J|Y2m4^TXnE5l
可以看到每5分钟一次检查点.
Q'Y5Qg`FV~Z0 ITPUB个人空间ei,DP7[.j)_
另外可以通过v$kcccp视图观察当前的检查点位置.ITPUB个人空间C%J?d4H
SQL> select CPDRT,to_char(CPLRBA_SEQ,'xxxx')||'.'||to_char(CPLRBA_BNO,'xxxxx')||'.'||CPLRBA_BOF "Low 16",CPLRBA_SEQ||'.'||CPLRBA_BNO||'.'||CPLRBA_BOF "Low RBA",CPODR_SEQ||'.'||CPODR_BNO||'.'||CPODR_BOF "On disk RBA",CPODS,CPODT,CPHBT from x$kcccp where cphbt<>0;
"O&VU_-M$de/Xb0 ITPUB个人空间,TE,}(h2Bo@;T1C
CPDRT Low 16 Low RBA On disk RBA CPODS CPODT CPHBTITPUB个人空间u%e0ate0u:H;y
---------- -------------------- --------------- --------------- ---------------- -------------------- ----------ITPUB个人空间b-gey"Iq-C#G&T4d z
26 2ba. 9d.0 698.157.0 698.307.0 2363076 03/03/2008 15:23:07 648336376
t^S0O|.Z'Rk2L0 为了便于观察:Low 16 是Low RBA 的16进制.ITPUB个人空间UBh'I({w&|:E+{
ITPUB个人空间6m;aD-O7wEH
注:在x$kcccp中看到的是DBWR的写进度.当把 log_checkpoints_to_alert这个参数设置为true后,可以在告警日志中看到增量检查点的触发信息.ITPUB个人空间\m^g]
S J"~@'H~4Y3[0 2,日志切换时的检查点.
+l.?NW+]0 当发生日志切换时,也会触发检查点.在数据库并不繁忙的情况下,日志切换的检查点并不急于完成.之所以在日志切换的时候触发一次检查点,是为了保证重做日志文件所对应的脏块都被写进磁盘文件.如果写脏块的速度比较慢,日志文件循环一圈后,又该覆盖此日志文件时,而此日志文件的检查点还没有完成,那么覆盖操作将等待.等待事件名:log file switch(checkpoint incomplete).如果出现该等待事件,解决方法:1,可以增加日志文件组的数量.2,观察下增量检查点的间隔时间.如果是因为增量检查点间隔时间太长,导致积攒的脏块过多.可以把增量检查点参数设置的频繁点.
&XH'N!dF{w0
6AMeGL3h?0 日志切换检查点除了会触发DBWR写脏块外,CKPT进程还要将切换时的SCN写进数据文件头和控制文件中的数据库信息节,还有数据文件节.另外还要将新的连机重做日志文件中第一条重做记录的RBA写进数据文件头.ITPUB个人空间&c/W u HE,k{
9xG!S*k[ Z ?]]0 日志切换检查点写进数据文件头的SCN,可以通过v$datafile_header视图查看.
8?T-Pgu2|!B;f0 日志切换检查点写进控制文件中数据库信息节的SCN,可以通过v$database查看.ITPUB个人空间x~7B8@/Vjd!D1e8g
日志切换检查点写进控制文件中的数据文件节中的SCN,可以通过v$datafile查看.
X6oin;[#T&E0
G%^ B5QP F4T&}0 先把log_checkpoints_to_alert这个参数设置为真,以便可以在告警日志中看到日志切换检查点的相关信息.ITPUB个人空间0@$AEBxR,F-v
alter system set log_checkpoints_to_alert=true;ITPUB个人空间0?g gx#u]A9Z:`eK
ITPUB个人空间`7od:]xJ
实验:验证下当触发了日志切换检查点后, 数据文件头,控制文件中的日志切换检查点信息都是什么:
xMLoP?0
*\%Uc;f8r7Be]+Q|zl[0 步骤一:查看当前数据文件头的SCN
OQ#\~t0 SQL> select checkpoint_change#,checkpoint_time,checkpoint_count from v$datafile_header;ITPUB个人空间p O(y%Yr#y_Z*F:{4O
ITPUB个人空间1Kj&~+A^o9\7q
CHECKPOINT_CHANGE# CHECKPOINT_TIM CHECKPOINT_COUNTITPUB个人空间#l oD},|r.h9x
------------------ -------------- ----------------ITPUB个人空间ur'Kd,x4t5Zs
2372527 03-3月 -08 646
&yOmt a-hCJ+m0 2372527 03-3月 -08 609
My.W{#H#b0 2372527 03-3月 -08 646
;HnmC1u2QcN0 ......
#|"D*SM1w'^n0 已选择11行。
!b%}'z+k0i$J*Y7e/`Z0
i#`\Oz*z!PbK0 步骤二:查看当前控制文件中的数据库信息节的日志切换检查点信息ITPUB个人空间4HU-[%T%B*j
SQL> select checkpoint_change# from v$database;
,sU!O oIs8w-L0 ITPUB个人空间 KXA"`6N!YFe
CHECKPOINT_CHANGE#
C/n{9`:O#dr0 ------------------ITPUB个人空间j0I3pE2@\l^C
2372527
dx;}9N hX6j~0
t&x8@0k;v0 步骤三:查看当前控制文件中的数据文件节中的日志切换检查点信息ITPUB个人空间j/r3p8U{ h
SQL> select checkpoint_change#,checkpoint_time,last_change#,last_time,substr(name,1,30) from v$datafile;
/M/z!N!a4F;a^jg0
9m,G$BM0Gas0 CHECKPOINT_CHANGE# CHECKPOINT_TIM LAST_CHANGE# LAST_TIME SUBSTR(NAME,1,30)
Q6EtA/Vsl_0 ------------------ -------------- ------------ -------------- -------------------------------------------
8^7t7Z4I7I[)z0 2372527 03-3月 -08 E:\ORACLE\PRODUCT\10.2.0\ORADA
@;vhP)}zt-x5J0 2372527 03-3月 -08 E:\ORACLE\PRODUCT\10.2.0\ORADA
'h d8IRu2F_v0 2372527 03-3月 -08 E:\ORACLE\PRODUCT\10.2.0\ORADAITPUB个人空间(p)F(TjEP3a+CU0U5Z
......ITPUB个人空间{H8K9@A.iIQ
已选择11行。
+ct/p)~!T0
2h`r:UO&afh\ |0 步骤四:查看当前SCN
Bwu6Sar w$J]%P{6G0 SQL> select dbms_flashback.get_system_change_number from dual;
A(R1jr!Nd$?e0
3E&v`v6EX0 GET_SYSTEM_CHANGE_NUMBER
H"g2f lpZF$H/V0 ------------------------
$Kv6yF:GS9G2Q0 2373997ITPUB个人空间-S l[a8CF2}u]
ITPUB个人空间hDu&h H\
步骤五:手动触发日志切换检查点ITPUB个人空间N#U2e _'y9`S?
ITPUB个人空间Wn5B3S5^Z8i
SQL> alter system switch logfile;ITPUB个人空间:O;V1]8k!f!s*|
l|o2PYK2{r hn0 系统已更改。ITPUB个人空间!maE#d2}#LV
1vfbza0 步骤六:查看日志切换后的数据文件头的SCN
A&{.A$w-xi&`0 SQL> select checkpoint_change#,checkpoint_time,checkpoint_count from v$datafile_header;ITPUB个人空间?,K4iES*@mf3g)Y*p
"_9}p `T0 CHECKPOINT_CHANGE# CHECKPOINT_TIM CHECKPOINT_COUNTITPUB个人空间 _(WQz2N7LR#B
------------------ -------------- ----------------ITPUB个人空间d"Qm1u&]F4| _
2372527 03-3月 -08 646ITPUB个人空间B(jTY ^MC
2372527 03-3月 -08 609ITPUB个人空间5M s;v._"v\t JC#x Z:\
2372527 03-3月 -08 646
6s&BE2Z~7W3rb0 ......ITPUB个人空间x:xy j8v
已选择11行。ITPUB个人空间b(d+z U5VP].?Sd
ITPUB个人空间Nf {"p^u4D
ITPUB个人空间~\9v R0X
步骤七:查看日志切换后控制文件中的数据库信息节的日志切换检查点信息
.F1B&Hi2f S0?0MOi|1E0
%v;z&V L,NI-c0 在晶晶实验九中,主要讲述了增量检查点,他属于检查点的一种,除了增量检查点之外,还有完全检查点和切换日志检查点.下面分别论述一下.ITPUB个人空间`Y,u@9jF7x&Qy
ITPUB个人空间|2A/N%Ml-K UK
1,增量检查点,
j}.i;x/j|0 增量检查点所涉及的主要概念,是一个队列一个进程.队列是检查点队列,进程是CKPT进程.CKPT进程有两项任务,一个是在一定的时机触发DBWR并告知DBWR的Target RBA,另一个任务是每3秒一次将DBWR的写进度更新到控制文件中.CKPT的这两个任务合在一起,叫做--增量检查点.通常所说的触发增量检查点,是指CKPT进程通知DBWR刷新脏块这个操作.ITPUB个人空间;B6f4q'IZ_*KH5{P
在10g中把 log_checkpoint_to_alert设置为真,可以在告警日志中观察到增量检查点的触发.在9I中看不到增量检查点,可以看到其他检查点的触发信息.
s iBWS([w0 ITPUB个人空间 QCg,^ `Kd+lt
观察增量检查点:
6A.{5\gxr;@4W0 步骤1:ITPUB个人空间"P.U#^.Cl
SQL> alter system set log_checkpoints_to_alert=true;
d a}4@'~/j0na |0 ITPUB个人空间(^u?3u4SR_ O
系统已更改。ITPUB个人空间8ah0|WQm'`{k3|0N
#I7r5H[^A;w0 步骤2:将增量检查点的切换频率定为300秒. ITPUB个人空间-r B4J j|Or b6W V
SQL> alter system set log_checkpoint_timeout=300;[单位是秒]ITPUB个人空间2n7{-yl![7ut
ITPUB个人空间lmw;r#} LR
系统已更改。ITPUB个人空间:e*w-V6n*[ ?{\
ITPUB个人空间"SUs{.dR9k#h)w
步骤3:查看告警日志中的增量检查点信息.
b aUc9f*i0 ...
XL!m1n%c0 Incremental checkpoint up to RBA [0x2b9.747.0], current log tail at RBA [0x2b9.848.0]ITPUB个人空间tWi }8a
Mon Mar 03 14:51:40 2008ITPUB个人空间7weOms1vg
Incremental checkpoint up to RBA [0x2b9.855.0], current log tail at RBA [0x2b9.876.0]
?@!m1Yv-`&E8d0 Mon Mar 03 14:56:43 2008
4NV-aUl*k W0 Incremental checkpoint up to RBA [0x2b9.877.0], current log tail at RBA [0x2b9.8f0.0]ITPUB个人空间e#Z}S2cb
Mon Mar 03 15:01:43 2008ITPUB个人空间j#d)o \V
Incremental checkpoint up to RBA [0x2b9.8f5.0], current log tail at RBA [0x2b9.d70.0]ITPUB个人空间%i7rN4h-B(gh2K
Mon Mar 03 15:06:43 2008ITPUB个人空间"~Ecx%D
Incremental checkpoint up to RBA [0x2b9.d74.0], current log tail at RBA [0x2b9.fd9.0]ITPUB个人空间3~5If%z!k,S[8V
Mon Mar 03 15:11:44 2008
HXd$tF;L0 ...ITPUB个人空间k|-j;|,].R
注:Incremental checkpoint(增量检查点的意思)/第1个RBA(增量检查点发生时当前的检查点位置)/第2个RBA(检查点发生时的当前的on disk rba);
$`6L-{"ql$e/G0 ITPUB个人空间#J|Y2m4^TXnE5l
可以看到每5分钟一次检查点.
Q'Y5Qg`FV~Z0 ITPUB个人空间ei,DP7[.j)_
另外可以通过v$kcccp视图观察当前的检查点位置.ITPUB个人空间C%J?d4H
SQL> select CPDRT,to_char(CPLRBA_SEQ,'xxxx')||'.'||to_char(CPLRBA_BNO,'xxxxx')||'.'||CPLRBA_BOF "Low 16",CPLRBA_SEQ||'.'||CPLRBA_BNO||'.'||CPLRBA_BOF "Low RBA",CPODR_SEQ||'.'||CPODR_BNO||'.'||CPODR_BOF "On disk RBA",CPODS,CPODT,CPHBT from x$kcccp where cphbt<>0;
"O&VU_-M$de/Xb0 ITPUB个人空间,TE,}(h2Bo@;T1C
CPDRT Low 16 Low RBA On disk RBA CPODS CPODT CPHBTITPUB个人空间u%e0ate0u:H;y
---------- -------------------- --------------- --------------- ---------------- -------------------- ----------ITPUB个人空间b-gey"Iq-C#G&T4d z
26 2ba. 9d.0 698.157.0 698.307.0 2363076 03/03/2008 15:23:07 648336376
t^S0O|.Z'Rk2L0 为了便于观察:Low 16 是Low RBA 的16进制.ITPUB个人空间UBh'I({w&|:E+{
ITPUB个人空间6m;aD-O7wEH
注:在x$kcccp中看到的是DBWR的写进度.当把 log_checkpoints_to_alert这个参数设置为true后,可以在告警日志中看到增量检查点的触发信息.ITPUB个人空间\m^g]
S J"~@'H~4Y3[0 2,日志切换时的检查点.
+l.?NW+]0 当发生日志切换时,也会触发检查点.在数据库并不繁忙的情况下,日志切换的检查点并不急于完成.之所以在日志切换的时候触发一次检查点,是为了保证重做日志文件所对应的脏块都被写进磁盘文件.如果写脏块的速度比较慢,日志文件循环一圈后,又该覆盖此日志文件时,而此日志文件的检查点还没有完成,那么覆盖操作将等待.等待事件名:log file switch(checkpoint incomplete).如果出现该等待事件,解决方法:1,可以增加日志文件组的数量.2,观察下增量检查点的间隔时间.如果是因为增量检查点间隔时间太长,导致积攒的脏块过多.可以把增量检查点参数设置的频繁点.
&XH'N!dF{w0
6AMeGL3h?0 日志切换检查点除了会触发DBWR写脏块外,CKPT进程还要将切换时的SCN写进数据文件头和控制文件中的数据库信息节,还有数据文件节.另外还要将新的连机重做日志文件中第一条重做记录的RBA写进数据文件头.ITPUB个人空间&c/W u HE,k{
9xG!S*k[ Z ?]]0 日志切换检查点写进数据文件头的SCN,可以通过v$datafile_header视图查看.
8?T-Pgu2|!B;f0 日志切换检查点写进控制文件中数据库信息节的SCN,可以通过v$database查看.ITPUB个人空间x~7B8@/Vjd!D1e8g
日志切换检查点写进控制文件中的数据文件节中的SCN,可以通过v$datafile查看.
X6oin;[#T&E0
G%^ B5QP F4T&}0 先把log_checkpoints_to_alert这个参数设置为真,以便可以在告警日志中看到日志切换检查点的相关信息.ITPUB个人空间0@$AEBxR,F-v
alter system set log_checkpoints_to_alert=true;ITPUB个人空间0?g gx#u]A9Z:`eK
ITPUB个人空间`7od:]xJ
实验:验证下当触发了日志切换检查点后, 数据文件头,控制文件中的日志切换检查点信息都是什么:
xMLoP?0
*\%Uc;f8r7Be]+Q|zl[0 步骤一:查看当前数据文件头的SCN
OQ#\~t0 SQL> select checkpoint_change#,checkpoint_time,checkpoint_count from v$datafile_header;ITPUB个人空间p O(y%Yr#y_Z*F:{4O
ITPUB个人空间1Kj&~+A^o9\7q
CHECKPOINT_CHANGE# CHECKPOINT_TIM CHECKPOINT_COUNTITPUB个人空间#l oD},|r.h9x
------------------ -------------- ----------------ITPUB个人空间ur'Kd,x4t5Zs
2372527 03-3月 -08 646
&yOmt a-hCJ+m0 2372527 03-3月 -08 609
My.W{#H#b0 2372527 03-3月 -08 646
;HnmC1u2QcN0 ......
#|"D*SM1w'^n0 已选择11行。
!b%}'z+k0i$J*Y7e/`Z0
i#`\Oz*z!PbK0 步骤二:查看当前控制文件中的数据库信息节的日志切换检查点信息ITPUB个人空间4HU-[%T%B*j
SQL> select checkpoint_change# from v$database;
,sU!O oIs8w-L0 ITPUB个人空间 KXA"`6N!YFe
CHECKPOINT_CHANGE#
C/n{9`:O#dr0 ------------------ITPUB个人空间j0I3pE2@\l^C
2372527
dx;}9N hX6j~0
t&x8@0k;v0 步骤三:查看当前控制文件中的数据文件节中的日志切换检查点信息ITPUB个人空间j/r3p8U{ h
SQL> select checkpoint_change#,checkpoint_time,last_change#,last_time,substr(name,1,30) from v$datafile;
/M/z!N!a4F;a^jg0
9m,G$BM0Gas0 CHECKPOINT_CHANGE# CHECKPOINT_TIM LAST_CHANGE# LAST_TIME SUBSTR(NAME,1,30)
Q6EtA/Vsl_0 ------------------ -------------- ------------ -------------- -------------------------------------------
8^7t7Z4I7I[)z0 2372527 03-3月 -08 E:\ORACLE\PRODUCT\10.2.0\ORADA
@;vhP)}zt-x5J0 2372527 03-3月 -08 E:\ORACLE\PRODUCT\10.2.0\ORADA
'h d8IRu2F_v0 2372527 03-3月 -08 E:\ORACLE\PRODUCT\10.2.0\ORADAITPUB个人空间(p)F(TjEP3a+CU0U5Z
......ITPUB个人空间{H8K9@A.iIQ
已选择11行。
+ct/p)~!T0
2h`r:UO&afh\ |0 步骤四:查看当前SCN
Bwu6Sar w$J]%P{6G0 SQL> select dbms_flashback.get_system_change_number from dual;
A(R1jr!Nd$?e0
3E&v`v6EX0 GET_SYSTEM_CHANGE_NUMBER
H"g2f lpZF$H/V0 ------------------------
$Kv6yF:GS9G2Q0 2373997ITPUB个人空间-S l[a8CF2}u]
ITPUB个人空间hDu&h H\
步骤五:手动触发日志切换检查点ITPUB个人空间N#U2e _'y9`S?
ITPUB个人空间Wn5B3S5^Z8i
SQL> alter system switch logfile;ITPUB个人空间:O;V1]8k!f!s*|
l|o2PYK2{r hn0 系统已更改。ITPUB个人空间!maE#d2}#LV
1vfbza0 步骤六:查看日志切换后的数据文件头的SCN
A&{.A$w-xi&`0 SQL> select checkpoint_change#,checkpoint_time,checkpoint_count from v$datafile_header;ITPUB个人空间?,K4iES*@mf3g)Y*p
"_9}p `T0 CHECKPOINT_CHANGE# CHECKPOINT_TIM CHECKPOINT_COUNTITPUB个人空间 _(WQz2N7LR#B
------------------ -------------- ----------------ITPUB个人空间d"Qm1u&]F4| _
2372527 03-3月 -08 646ITPUB个人空间B(jTY ^MC
2372527 03-3月 -08 609ITPUB个人空间5M s;v._"v\t JC#x Z:\
2372527 03-3月 -08 646
6s&BE2Z~7W3rb0 ......ITPUB个人空间x:xy j8v
已选择11行。ITPUB个人空间b(d+z U5VP].?Sd
ITPUB个人空间Nf {"p^u4D
ITPUB个人空间~\9v R0X
步骤七:查看日志切换后控制文件中的数据库信息节的日志切换检查点信息