没有必胜的秘籍,没有方程式遵循~~ 要赢~~只有全身心的投入!

晶晶实验十之再论检查点篇

上一篇 / 下一篇  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中看不到增量检查点,可以看到其他检查点的触发信息.
siBWS([w0 ITPUB个人空间 Q Cg,^`Kd+lt
观察增量检查点:
6A.{5\g xr;@4W0 步骤1:ITPUB个人空间"P.U#^.Cl
SQL> alter system set log_checkpoints_to_alert=true;
da}4@'~/j0na |0 ITPUB个人空间(^u?3u4SR_ O
系统已更改。ITPUB个人空间8ah0|WQm'`{k3|0N

#I7r5H[^A;w0 步骤2:将增量检查点的切换频率定为300秒. ITPUB个人空间-r B4J j|Orb6W V
SQL> alter system set log_checkpoint_timeout=300;[单位是秒]ITPUB个人空间2n7{-yl![7ut
ITPUB个人空间lmw;r#} LR
系统已更改。ITPUB个人空间:e*w-V6n*[ ?{ \
ITPUB个人空间"SU s{.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^TXn E5l
可以看到每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&V U_-M$de/Xb0 ITPUB个人空间,TE,}(h2Bo@;T1C
     CPDRT Low 16               Low RBA         On disk RBA     CPODS            CPODT                  CPHBTITPUB个人空间u%e0at e0u: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]

SJ"~@'H~4Y3[0   2,日志切换时的检查点.
+l.?NW+]0    当发生日志切换时,也会触发检查点.在数据库并不繁忙的情况下,日志切换的检查点并不急于完成.之所以在日志切换的时候触发一次检查点,是为了保证重做日志文件所对应的脏块都被写进磁盘文件.如果写脏块的速度比较慢,日志文件循环一圈后,又该覆盖此日志文件时,而此日志文件的检查点还没有完成,那么覆盖操作将等待.等待事件名:log file switch(checkpoint incomplete).如果出现该等待事件,解决方法:1,可以增加日志文件组的数量.2,观察下增量检查点的间隔时间.如果是因为增量检查点间隔时间太长,导致积攒的脏块过多.可以把增量检查点参数设置的频繁点.
&XH'N!dF{ w0
6AM eG L3h?0   日志切换检查点除了会触发DBWR写脏块外,CKPT进程还要将切换时的SCN写进数据文件头和控制文件中的数据库信息节,还有数据文件节.另外还要将新的连机重做日志文件中第一条重做记录的RBA写进数据文件头.ITPUB个人空间&c/W uHE,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查看.
X6o i n;[#T&E0
G%^ B5QPF4T&}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:]x J
实验:验证下当触发了日志切换检查点后, 数据文件头,控制文件中的日志切换检查点信息都是什么:
xMLo P?0
*\%Uc;f8r7Be]+Q|zl[0 步骤一:查看当前数据文件头的SCN
OQ#\~t0 SQL> select checkpoint_change#,checkpoint_time,checkpoint_count from v$datafile_header;ITPUB个人空间pO(y%Yr#y_Z*F:{4O
ITPUB个人空间1Kj&~+A^o9\7q
CHECKPOINT_CHANGE# CHECKPOINT_TIM CHECKPOINT_COUNTITPUB个人空间#loD},|r.h9x
------------------ -------------- ----------------ITPUB个人空间ur'K d,x4t5Zs
           2372527 03-3月 -08                  646
&yOmt a-hCJ+m0            2372527 03-3月 -08                  609
My.W{#H#b0            2372527 03-3月 -08                  646
;HnmC1u2Qc N0            ......
#|"D*SM1w'^n0 已选择11行。
!b%}'z+k0i$J*Y7e/`Z0
i#`\O z*z!PbK0 步骤二:查看当前控制文件中的数据库信息节的日志切换检查点信息ITPUB个人空间4HU-[%T%B*j
SQL> select checkpoint_change# from v$database;
,sU!OoIs8w-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 d8I Ru2F_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
Bwu6S arw$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 ------------------------
$Kv6y F:GS9G2Q0                  2373997ITPUB个人空间-Sl[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

1vf bza0 步骤六:查看日志切换后的数据文件头的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个人空间_(WQ z2N7LR#B
------------------ -------------- ----------------ITPUB个人空间d"Qm1u&]F4|_
           2372527 03-3月 -08                  646ITPUB个人空间B(jTY ^MC
           2372527 03-3月 -08                  609ITPUB个人空间5M s;v._"v\t JC#xZ:\
           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
步骤七:查看日志切换后控制文件中的数据库信息节的日志切换检查点信息
AX3e8qy0 SQL> select checkpoint_change# from v$database;
n+LO2[aQ0
)Hdre nk1I,|e*k6k3v0 CHECKPOINT_CHANGE#ITPUB个人空间chna6Cn5d7b
------------------
{s3GrZ5y0            2372527
4F0n3\t'G?`O0
"{1C,s4} CVpvx [C'V0 步骤八:查看日志切换后控制文件中的数据文件节中的日志切换检查点信息ITPUB个人空间7MniXeY!L
SQL> select checkpoint_change#,checkpoint_time,last_change#,last_time,substr(name,1,30) from v$datafile;ITPUB个人空间1?P.d)a+b

|/Tx:xff0 CHECKPOINT_CHANGE# CHECKPOINT_TIM LAST_CHANGE# LAST_TIME      SUBSTR(NAME,1,30)
J8VLrn` Konf0 ------------------ -------------- ------------ -------------- -----------------------------------------------
fj _r&}K|0            2372527 03-3月 -08                                 E:\ORACLE\PRODUCT\10.2.0\ORADA
cl~-cGG0            2372527 03-3月 -08                                 E:\ORACLE\PRODUCT\10.2.0\ORADA
1G4m Q| `0            2372527 03-3月 -08                                 E:\ORACLE\PRODUCT\10.2.0\ORADAITPUB个人空间6V9UJ%Z:pp`
           ......
{["h^.X;I"W(\{{h0 已选择11行。
7k$TqQ aZ#{:Z*W0 ITPUB个人空间9Ne!@ v&R)oY
**由于普通测试机的I/O并不繁忙,看到的数据很有可能是没有发生变化的,这个时候可以查看告警日志.发现
0s"A;})f4JAA0 Mon Mar 03 19:50:35 2008
\g wt?3M:f0 Beginning log switch checkpoint up to RBA [0x2c0.2.10], SCN: 2374009
],G{Z'\(rP%~0 Thread 1 advanced to log sequence 704
!AL U&]1K~ev+O0   Current log# 9 seq# 704 mem# 0: E:\LOG9A.RDO
ME-m/J^C~ R ~0 此时的日志切换还为完成,数据文件头的日志切换的检查点和控制文件的日志切换检查点还没来的急更新.少等一会就会完成.oracle会根据机器的繁忙程度来决定什么时候完成日志切换的检查点.通常如果机器比较繁忙,oracle趋向于更急切的完成日志切换检查点.ITPUB个人空间+{ H Y t"B ^-q3hK

:P7f&g4]/Ad8SY i0 少等一会再次查看告警日志:
I/YG!bo!}_0 Mon Mar 03 19:50:35 2008ITPUB个人空间 G;|:u}b!Yy`
Beginning log switch checkpoint up to RBA [0x2c0.2.10], SCN: 2374009ITPUB个人空间e%B#q1yoh+M WW8a
Thread 1 advanced to log sequence 704
hx$R&SEJF0   Current log# 9 seq# 704 mem# 0: E:\LOG9A.RDOITPUB个人空间&n%W:o9S~r_
Mon Mar 03 19:53:58 2008
IXFl&om0 Completed checkpoint up to RBA [0x2c0.2.10], SCN: 2374009ITPUB个人空间qFE&^'S/y
可以发现除了beginning log switch chenkpoint外,多了一个completed checkpoint.日志切换的检查点到此才真正的完成.由于我的实验环境并不繁忙,oracle拖了3分钟才去真正的完成日志切换检查点.
t:`H7@u4au9]0
Ix4q Wh],W0 此时再查看日志切换后的数据文件头的SCNITPUB个人空间g(m0b4mR["p
SQL> select checkpoint_change#,checkpoint_time,checkpoint_count from v$datafile_header;ITPUB个人空间Lw-[M5N[W7r
ITPUB个人空间ln6[5Qk `M$o7d
CHECKPOINT_CHANGE# CHECKPOINT_TIM CHECKPOINT_COUNTITPUB个人空间^!N|,v k~i[
------------------ -------------- ----------------
O9^:o3yN0            2374009 03-3月 -08                  647
(n Joul7H0            2374009 03-3月 -08                  610
MJ0]3Bj,l0u0            2374009 03-3月 -08                  647ITPUB个人空间1rJ(n1[(`-p
           ......
"d5[\9JM5?D0 再查看日志切换后控制文件中的数据库信息节的日志切换检查点信息
&zZ8G,j"NN0 SQL> select checkpoint_change# from v$database;
&v.@'d8s@r$sH6A0 ITPUB个人空间"Q/v#Wt }tub
CHECKPOINT_CHANGE#ITPUB个人空间 Z&g T ss\#}F
------------------ITPUB个人空间?!w5vjj&v
           2374009
'S6r~*E"w0QW1}iD0
1B6V_;n:eKV0 再查看日志切换后控制文件中的数据文件节中的日志切换检查点信息ITPUB个人空间 x R6Xt$}0t4x
SQL> select checkpoint_change#,checkpoint_time,last_change#,last_time,substr(name,1,30) from v$datafile;ITPUB个人空间H(X*y$y|Jbp5z.QX
ITPUB个人空间WLz{V!u o
CHECKPOINT_CHANGE# CHECKPOINT_TIM LAST_CHANGE# LAST_TIME      SUBSTR(NAME,1,30)
Bo;L4^P4|~0 ------------------ -------------- ------------ -------------- ----------------------------------------------
O JV&g)TnPvp&w|t0            2374009 03-3月 -08                                 E:\ORACLE\PRODUCT\10.2.0\ORADAITPUB个人空间9T$Q(MW {"zo
           2374009 03-3月 -08                                 E:\ORACLE\PRODUCT\10.2.0\ORADAITPUB个人空间._0n| eq AT9h!E4`
           2374009 03-3月 -08                                 E:\ORACLE\PRODUCT\10.2.0\ORADAITPUB个人空间| G |uvas,o"Z%I"i
              ......ITPUB个人空间\0M h3w5i1n
ITPUB个人空间q-?lV`)^
****从结果可以看出日志切换时的SCN是2373997,而视图中所显示的2374009比2373997大了12.这是因为手动查看SCN和手动切换日志这两个命令间有个时间差.(忽略不计).由此可以证明,在日志切换时,CKPT写进数据文件和控制文件中的SCN,是切换命令开始时的SCN.
:lL;x:bUI0
XD!K-h9jH0   在日志切换时,被写进数据文件头的并不只有SCN信息,还有RBA信息.这个RBA是新的连机重做日志文件第一条重做记录的RBA.根据告警日志中的信息,此处是RBA [0x2c0.2.10].上面所介绍的几个视图中,没有显示RBA信息.我们可以通过转储查看到这个RBA.   ITPUB个人空间%W"Z K:~o5P0G#{
转储命令如下:
K&p$D)@6B}\0 SQL> alter session set events 'immediate trace name file_hdrs level 10';
+D tDarH]!mh{0 ITPUB个人空间 q:q'K^}^f
会话已更改。
6@\)x1~ |7lxi\0
kM#L-TQ;~%{{-K0 转储数据文件头的结果:ITPUB个人空间5V-t'Miv1Y2k5@ Z
DATA FILE #1: ITPUB个人空间j-_,[.| b
  (name #7) E:\ORACLE\PRODUCT\10.2.0\ORADATA\ONE10G\SYSTEM01.DBFITPUB个人空间:q)c\Z [e}V/B;?,y
...ITPUB个人空间0e \fnd2uo!o
Checkpointed at scn:  0x0000.00243979 03/03/2008 19:50:35   [这些信息对应v$datafile_header]ITPUB个人空间6oG3F^L
thread:1 rba0x2c0.2.10)
}Z bj'x y W8d0 ...
z'S/kY5n0 ****在转储文件中的每个数据文件相关信息中,都可以找到如上两行,这其中检查点SCN和时间戳,我们都已经在视图中看到了.
i'cnBRw_;w ^0 RBA信息,告警日志中显示的有,上述3个视图中并未显示出来.
_}'d6M.VK'T0e0
}$kx5y QPa2@0 转储控制文件的结果:ITPUB个人空间#_ |_nNa)m9`N2E
ITPUB个人空间x?1V!Z&KH
这是控制文件中 数据库信息节中的日志切换检查点信息:
%s {NRr @4v0 ***************************************************************************
1~mq)wqyzo-[0 DATABASE ENTRY
Lb#ro9s` e N0 ***************************************************************************ITPUB个人空间4q r'r6K P y9WE
...
I"tM8FPW0 Database checkpoint: Thread=1 scn: 0x0000.00243979[这些信息对应v$database]
rlf2@t%y0 ...ITPUB个人空间*JE0Ph8buH0I]y
这是控制文件中的数据文件记录节,可以看到日志切换检查点SCN.
8F0P:at`!YoO}0 DATA FILE #1:
f Gi g.g/zS/N0   (name #7) E:\ORACLE\PRODUCT\10.2.0\ORADATA\ONE10G\SYSTEM01.DBFITPUB个人空间SB bq"k | A t8[
...ITPUB个人空间{&H7R\$z5CV
Checkpoint cnt:647 scn: 0x0000.00243979 03/03/2008 19:50:35  [这些信息对应v$datafile]ITPUB个人空间*tk Khc l&dO;J
...
_\If,FQ4{S0 ****在控制文件中,只记录日志切换时的SCN,不记录RBA.
~Q jm5vK(_7~`0 ITPUB个人空间i#Mj5S+B S2]8YM-@

"r1L%jnlVl0    3,完全检查点.ITPUB个人空间+o)?{ tjY:L$yg7C
   完全检查点,将会写出所有的脏块,完全检查点发生时,将不能有新的脏块产生,直到完全检查点完成,以非shutdown abort关闭数据库时就会发生完全检查点,还有就是手动发布命令:alter system checkpoint;
p3`I8hex:Y_7M(N N0    完全检查点也将会在数据文件头,控制文件中数据库信息节,数据文件节中写入当前SCN.
NB0Ut;HU"Xtu0 查看告警日志信息如下:
%K2k {|\2h0 Mon Mar 03 15:38:11 2008
3`,J[Nuy Z0 Beginning global checkpoint up to RBA [0x2ba.285.10], SCN: 2363568ITPUB个人空间J%F"e3_ Swy8d`
Completed checkpoint up to RBA [0x2ba.285.10], SCN: 2363568ITPUB个人空间%]0L2t"W Hc/n
   ITPUB个人空间Rkf%V!W,Q#a'@
*****小结:日志切换所触发的检查点,1,要通知DBWR写脏块.2,要向数据文件头和控制文件中写入切换时的SCN.3,把新的连机重做日志的第一重做记录的RBA写进数据文件头.******
f j!`A I KZ`0
#U%Hakt2W&Bn S*r0 为什么要记录写入时的SCN和RBA呢??ITPUB个人空间1E8Q8\%[Z?

nAE1v1QX4^0    如果现在数据文件头和控制文件中的SCN是2374009,假如说现在发生了介质故障,数据库宕机,将两星期前备份的某一个数据文件还原过来覆盖当前的已损坏的数据文件.这个备份的数据文件头SCN是2370000,当启动数据库时,oracle会发现数据文件头的SCN和控制文件中的SCN 不匹配,此时会要求完成介质恢复.当 recover datafile 时,oracle会根据数据文件头所记载的RBA,到相应的日志文件中寻找重做信息,进行恢复.

TAG:

Alienovo的个人空间 Alienovo 发布于2008-03-03 21:24:23
沙发?  晶晶真勤奋啊
虎窝 tigerfish 发布于2008-03-03 21:56:57

QUOTE:

原帖由 Alienovo 于 2008-3-3 21:24 发表
s)C        y:P6?沙发?  晶晶真勤奋啊
8G,B,?9zW;@(P6Z/En
U3\V


.k]jxLwV
ward发布于2008-03-03 22:02:03
期待将来出个合集
sir.liang的个人空间 sir.liang 发布于2008-03-03 22:12:04

QUOTE:

原帖由 ward 于 2008-3-3 22:02 发表
?r3]e,oh3DB'K期待将来出个合集
&C)T.M/iy
-VYq&w*G/\fo预计多少篇呢?
hanjs发布于2008-03-03 22:27:37
估计得写本书了!
pvb1979xx发布于2008-03-03 22:30:29
9,10连着看,舒服
likaiabc发布于2008-03-03 22:47:30
看着晶晶这么勤奋。
0B"D)z(qe3KK#vspace.itpub.net自己好有危机感啊。
stronghearted的个人空间 stronghearted 发布于2008-03-03 23:36:03
good job!
index01发布于2008-03-04 09:40:16
学习~
p:IUOt}
lspace.itpub.net
oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net9f:ykW,au
再问个问题:
{$O7O&F4jy/j4BDITPUB个人空间增量CKPT和完全CKPT触发时,DBwn写脏数据的量是有区别的吧?9U
H(b^4l+G`4W&Th

增量CKPT发生时DBWn是不是只写CKPTQ中的相应增量CKPT前的脏数据?
M ~)L
j,r Zoracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net
完全CKPT发生时,DBWn是不是会写所有的脏数据不管是否已提交,即CKPTQ中的所有脏数据,然后CKPTQ清空重新开始
蚊子窝 foxmile 发布于2008-03-04 09:47:44
总结的一如既往的好。
'ZP*V0UjE咳咳,错别字也还存在。晶晶认真看看,改改。
晶晶小妹的个人空间 晶晶小妹 发布于2008-03-04 11:41:15

QUOTE:

原帖由 index01 于 2008-3-4 09:40 发表

Go4uN8DNS9W9d
学习~
*[m Kgxspace.itpub.netH2^#U6LD
再问个问题:space.itpub.net0|!V'D5o g:Q#x
增量CKPT和完全CKPT触发时,DBwn写脏数据的量是有区别的吧?
(X a Z1P.h"k
X._
增量CKPT发生时DBWn是不是只写CKPTQ中的相应增量CKPT前的脏数据?space.itpub.net;H#Y;P'a o
Be8W

完全CKPT发生时,DBWn是不是会写所有的脏数据不管是否已提交,即CKPTQ中的所有脏数据,然后CKPTQ清空重新开始
{7z#jq'\/D0J3iK
'Av/Br \ z:Mb&Ep
粉正确!
5ug9Moy,yITPUB个人空间
VG
jx#Fe$ooracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net
另补充一点:在完全检查点期间,不允许新的DML操作.
paul oracle my love paulyibinyi 发布于2008-03-04 11:42:38
不错,总结的很详细
index01发布于2008-03-04 11:49:25
再问几个问题:!D)l-PJ}        xl

,ZhD;k~C8{/[ITPUB个人空间日志切换触发的是增量CKPT吧?增量CKPT一定会执行DBwn么?space.itpub.netF/f#Ok
dZZ*C

u4T8A p*l4AK
完全CKPT会立即执行DBwn的?是么?
%@Zwur"rIspace.itpub.net如果是的话,若完全CKPT发生时DBWn正忙的话,怎么办?有优先级别吧?
*poBP2L(]] F
.q]A?KWq8U Sspace.itpub.net如果一个增量CKPT正在等待DBwn去写数据,这时发生一个完全CKPT,那么Dbwn是怎么执行呢?
1]/V8qilwn:ah那么Oracle会只执行完全CKPT所触发的DBwn么?如果是的话那么前面增量CKPT所触发的DBWn就不会执行了是吧?ITPUB个人空间(JXM2]W5A
还是先执行增量CKPT的DBwn再执行完全CKPT的DBWn呢?oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net
V|q't.LV0D


S[,][X6\

谢谢晶晶小妹的回复~
haorman zuohao_lu 发布于2008-03-04 11:56:00
厉害啊.期待更多实验.
晶晶小妹的个人空间 晶晶小妹 发布于2008-03-04 13:22:03

QUOTE:

原帖由 index01 于 2008-3-4 11:49 发表
#q-G&YTe,M)[H
EITPUB个人空间
再问几个问题:oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net
D
mJS3OM`~


kf `I*F:CITPUB个人空间日志切换触发的是增量CKPT吧?增量CKPT一定会执行DBwn么?space.itpub.net"J6\:~!c#m!|
space.itpub.neth+}c3\*eF.[
V:J

完全CKPT会立即执行DBwn的?是么?
R7yO"G`/z/poracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net如果是的话,若完全CKPT发生时DBWn正忙的话,怎么办?有优先级别吧? space.itpub.net&{II:Z K*k
oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net
P)t KG2qVV&Mp

如果一个增量CKPT正在等待DBwn去写数据,这时发生一个完全CKPT,那么Dbwn是怎么执行呢?space.itpub.netu-\j"~tAe
那么Oracle会只执行完全CKPT所触发的DBwn么?如果是的话那么前面增量CKPT所触发的DBWn就不会执行了是吧?ITPUB个人空间%_v"wPD2];D,f
还是先执行增量CKPT的DBwn再执行完全CKPT的DBWn呢?
9d%rO,xF7cu2B(GITPUB个人空间
4^/KKDv5Zoracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net谢谢晶晶小妹的回复~
QLz]q\^

YyW L:V
s,uy
日志触发的是增量CKPT,但是此时CKPT进程完成的工作要比平时增量检查点时完成的工作要多.除了通知DBWR写脏块外,还要把日志切换时的SCN写进数据文件头和控制文件.

V!O*D#q4uclITPUB个人空间
增量CKPT会通知DBWN写脏块.
v
u-X[7g$Z/Z
nPqa

完全检查点时,DBWR会立即写脏块.yx6A2RD.}5t
DBWN如果在忙,就证明他在写脏块,完全检查点不会中断他原来写脏块的操作.只是告诉他有更多的脏块要写.此时会阻塞所有的DML操作.
.c2S2]%vp3`T
jrO(FFw
@+dITPUB个人空间
增量CKPT正在等待DBwn去写数据,这时发生一个完全CKPT,那么Dbwn是怎么执行呢?,o
s9n%DQ9]&}9T

增量检查点并不等待DBwn写数据,CKPT进程只是去通知DBWn写脏块,然后,CKPT的任务就结束了。对于CKPT进程来说,增量检查点的和完全检查点并不会互相影响。
5@u&IM*h zX&_/coracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net我用log_checkpoint_timeout将增量检查点的时间设为5分钟一次:
5dyK2`cspace.itpub.net下面看一段告警日志:
[ZC? x!c6s/\Tue Mar 04 12:35:43 2008space.itpub.net3U7u3eop:y\8Z,R5S$D,E
Incremental checkpoint up to RBA [0x326.687.0], current log tail at RBA [0x326.75b.0]
Wp/s6mkForacle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.netTue Mar 04 12:40:43 2008
H8\;K"x%J q!^X4VIncremental checkpoint up to RBA [0x326.75e.0], current log tail at RBA [0x326.792.0]
C8k:AP9[ A7GWU*goracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.netTue Mar 04 12:44:13 2008
\@"N2~Ooracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.netBeginning global checkpoint up to RBA [0x326.7e8.10], SCN: 2427929
3Jp        f3Ifg@TCompleted checkpoint up to RBA [0x326.7e8.10], SCN: 2427929oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net-ou%?$mH6g.w x
N

Tue Mar 04 12:45:44 2008)DCE*P?v
Incremental checkpoint up to RBA [0x326.7e8.0], current log tail at RBA [0x326.7f9.0]
(`d6F.C+GXTue Mar 04 12:50:44 2008
+D%WrFD3tITPUB个人空间Incremental checkpoint up to RBA [0x326.7fb.0], current log tail at RBA [0x326.82e.0]space.itpub.net1VR&r`}4ok

b1P\_1^,Cspace.itpub.net上面这段告警日志中显示,在35、40、45、50分别发生了四次增量检查点,在44分时,分生了一次完全检查点。但这次完全检查点,并没有对增量检查点的进度有任何的影响。
Cy7Vl$@aEITPUB个人空间至于在DBWn正在写脏块时,又被通知要去写其他的脏块,反正都是写脏块,DBwn不必要去暂停正在进行的操作,去完成其他写脏块操作。8CcT8T^2i
space.itpub.net1k6CF#xs;~
那么Oracle会只执行完全CKPT所触发的DBwn么?如果是的话那么前面增量CKPT所触发的DBWn就不会执行了是吧?space.itpub.netR-vwRs'] N2~J!_
当然不是了。增量检查点和完全检查点是互不相干的。
~Px!k'HAo&A.u!M

oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.netTM4kuYM!sl0O/e
还是先执行增量CKPT的DBwn再执行完全CKPT的DBWn呢?
^        IU        a(V]e0c bDBWn写脏块时,是将脏块攒成一批,脏块达到一定数量,成批的写出。假设批的数量是50个块,如果由于增量检查点,DBWn向批中放了30个脏块。此时还没有真正的写操作。这时,完全检查点发生了,一共有100个脏块,前20个脏块和批中的30个脏块组合成一批,一起写出。然后,后80个脏块分两批(一批满50个,一批30个)写出。
`b#pj3@xDW这是我的猜测,这部分太理论,无法用实验证明。
index01发布于2008-03-04 14:09:35
非常感谢!
晶晶小妹的个人空间 晶晶小妹 发布于2008-03-04 15:09:11

QUOTE:

原帖由 index01 于 2008-3-4 14:09 发表
(FZ5M H!c/hspace.itpub.net非常感谢!
ITPUB个人空间&\u$WB#t!W
ITPUB个人空间\~9m        C ?
c:k

客气咯,谢谢大力支持,有问题再讨论。^_^
RiJohn的个人空间 RiJohn 发布于2008-03-04 16:36:48

piner的个人空间 piner 发布于2008-03-04 16:42:15
支持.
eagle3250发布于2008-03-04 16:46:40
MM勤发贴呀,偶是你的FANS!
skelly skelly_huang 发布于2008-03-04 16:49:43
支持
倾听、交流、思考、成长 asangel 发布于2008-03-04 16:51:00
支持
solearn的个人空间 solearn 发布于2008-03-07 09:01:36
很好很强大!
ZGc](V(PITPUB个人空间e;e5jNh6P2z8p7V vE
tablespace offline和readonly时的检查点和以上三种情况有什么不同呢?是不是有一个表空间专用的检查点队列呢?ITPUB个人空间3qp9[A?f8f
要是把这两种情景下的故事再写一些就更完整了。期望这个帖子成为检查点概念终结篇。
烟囱的个人空间 烟囱 发布于2008-03-07 09:12:10
晶晶出品,必属精品.
1RB*Y,r mm5a^
R0v&Ioracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net
Db"_NU        {
呵呵.
烟囱的个人空间 烟囱 发布于2008-03-07 09:18:11
晶晶实验九找不到了???
晶晶小妹的个人空间 晶晶小妹 发布于2008-03-07 13:41:10

QUOTE:

原帖由 烟囱 于 2008-3-7 09:18 发表 ITPUB个人空间DPn ^{
晶晶实验九找不到了???
2p#y9F:u;\8u]{space.itpub.netSBFOd&z2l:RG/y

C|)F'j!Z"R$G`&@oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net怎么可能? 
oaQu.C1| G
aP t
]+Fbo4u N@space.itpub.net
要不直接去我的blog看吧,里面最全!
s)H/i e7]8KMITPUB个人空间space.itpub.net`ic^j [7p8QL
谢谢支持
O-n\&I0hspace.itpub.net+L$F[%{;d8v0gD!d
|*k

^_^
solearn的个人空间 solearn 发布于2008-03-07 18:12:23

QUOTE:

原帖由 solearn 于 2008-3-7 09:01 发表
,k/Vs
i6ktITPUB个人空间

f{n,{/a
H0eE6E"m;loracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net

8]:nXZZ%v7`tablespace offline和readonly时的检查点和以上三种情况有什么不同呢?是不是有一个表空间专用的检查点队列呢?-q Ac5c"N/D,_t4j
Xwz ~ v$vdR
9q u"Xk4`1I,n&x回去又想了一下,再重新看一遍本文。觉得应该只有一个检查点队列,不论是那种情况下的检查点,都是chpt进程向检查点队列添加新的脏块,DBWn就是民工只管低头搬砖。不知道理解的对不?
robincao发布于2008-03-07 19:08:36
勤奋的MM!
晶晶小妹的个人空间 晶晶小妹 发布于2008-03-07 21:41:39

QUOTE:

原帖由 solearn 于 2008-3-7 18:12 发表 5fcZ-[}#` hY'z
$Wc-[t[(W;T+q
oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net(B.r1R5t        V.T[ }
回去又想了一下,再重新看一遍本文。觉得应该只有一个检查点队列,不论是那种情况下的检查点,都是chpt进程向检查点队列添加新的脏块,DBWn就是民工只管低头搬砖。不知道理解的对不?
p1zB x{
~space.itpub.net

        kg[E?V space.itpub.net
},E*N        d        j$} ~w


j PX5[uyoracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net只一点不是很正确..向检查点队列添加脏块的是服务器进程.服务器进程为用户完成修改后,会同时将脏块添加到检查点队列.N
UZ
Fd+t0|



]:[/o!P/tD/Z'I3S
其他都对.
)s+p/J(O[wspace.itpub.net S/rn+v
^(Jb;cH:kg

^_^
WESTLIFE_XU发布于2008-03-07 23:01:11
很勤奋,有空一定好好拜读阁下的系列作品。
我来说两句

(可选)

日历

« 2008-09-06  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 31803
  • 日志数: 31
  • 图片数: 4
  • 建立时间: 2008-02-15
  • 更新时间: 2008-05-29

RSS订阅

Open Toolbar