Oracle (block clean out) oracle的塊清除

Steven1981發表於2008-08-07
Clean out有2種: fast commit cleanout
delayed block cleanout
[@more@]
1,如果一個事務(transaction)修改不超過10%buffer cache的資料塊時,oracle做的是fast commit cleanout。
2,如果一個事務(transaction)修改的塊超過10% buffer cache,那麼"超過的塊"就執行delayed block cleanout,
3,在事務commit前,修改的資料塊已經寫入硬碟,當發生commit時,oracle並不會把block重新讀入記憶體來做cleanout,這樣成本太高.
而是把cleanout留到下一次對此塊的訪問(select,update)時完成。
下面我們來簡單看一下這兩種情況:

--搭建環境
SQL> show parameter db_cache;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_cache_size big integer 58720256

--只需更改50M/10=5M的資料量就會觸發DELAY CLEAN OUT

SQL> create table t2 (id int ,col1 char(2000),col2 char(2000),col3 char(2000),col4 char(1000));

表已建立。

--1行一個塊,

SQL> insert into t2 select object_id,object_name,'1','1','1' from all_objects where rownum <=1000;

已建立1000行。

SQL> commit;


SQL> select * from (
2 select rownum rn, id,dbms_rowid.rowid_relative_fno(rowid) "file#",dbms_rowid.rowid_block_number(rowid) "block#" from t2 )
3 where rn=1 or rn=1000;

RN ID file# block#
---------- ---------- ---------- ----------
1 7559 8 36
1000 14700 8 1160

--fast clean out 快速塊清除
SQL> update t2 set id=id,col1=col1,col2='c',col3='c',col4='c' where id='7559'; --第36塊

1 ROWS UPDATED

SQL> select xidusn,xidslot,xidsqn,ubafil,ubablk,ubarec from v$transaction;

XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBAREC
-------- ---------- ---------- ---------- ---------- ----------
10 22 339 2 41167 11

SQL> COMMIT;

提交成功

SQL> alter system dump datafile 8 block 36;

系統已更改。


Start dump data blocks tsn: 8 file#: 8 minblk 36 maxblk 36
buffer tsn: 8 rdba: 0x02000024 (8/36)
scn: 0x0000.000b21db seq: 0x01 flg: 0x00 tail: 0x21db0601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Block header dump: 0x02000024
Object id on Block? Y
seg/obj: 0x739d csc: 0x00.b21db itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x2000021 ver: 0x01
inc: 0 exflg: 0

Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x000a.02b.00000152 0x0080a0c5.002a.2a C--- 0 scn 0x0000.000b218f
0x02 0x000a.016.00000153 0x0080a0cf.002a.0b ---- 1 fsc 0x0000.00000000
|
|
----這裡的FLAG已經清除
data_block_dump,data header at 0x3171064
===============
tsiz: 0x1f98
hsiz: 0x14
pbl: 0x03171064
bdba: 0x02000024
76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x42d
avsp=0x419
tosp=0x419
0xe:pti[0] nrow=1 offs=0
0x12:pri[0] offs=0x42d
block_row_dump:
tab 0, row 0, @0x42d
tl: 7019 fb: --H-FL-- lb: 0x2 cc: 5
col 0: [ 3] c2 4c 3c
col 1: [2000]
2f 31 30 30 37 36 62 32 33 5f 4f 72 61 43 75 73 74 6f 6d 44 61 74 75 6d 43
6c 6f 73 75 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20

... ... 資料內容部分省略

20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 2: [2000]
63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 3: [2000]
63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 4: [1000]
63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
end_of_block_dump
End dump data blocks tsn: 8 file#: 8 minblk 36 maxblk 36

--delay clean out 延時塊清除
SQL> update t2 set id=id,col1=col1,col2='c',col3='c',col4='c'; --8M的更新資料
已更新1000行。

SQL> select xidusn,xidslot,xidsqn,ubafil,ubablk,ubarec from v$transaction;

XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBAREC
---------- ---------- ---------- ---------- ---------- ----------
3 8 470 2 6788 1


SQL> COMMIT;

提交成功

SQL> alter system dump datafile 8 block 36;
--大於db_cache_size 10%的塊
系統已更改。

SQL> alter system dump datafile 8 block 1160;
--小於db_cache_size 10%的塊
系統已更改。



Start dump data blocks tsn: 8 file#: 8 minblk 36 maxblk 36
buffer tsn: 8 rdba: 0x02000024 (8/36)
scn: 0x0000.000b2b52 seq: 0x01 flg: 0x02 tail: 0x2b520601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Block header dump: 0x02000024
Object id on Block? Y
seg/obj: 0x739d csc: 0x00.b21db itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x2000021 ver: 0x01
inc: 0 exflg: 0

Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x000a.02b.00000152 0x0080a0c5.002a.2a C--- 0 scn 0x0000.000b218f
0x02 0x0003.008.000001d6 0x0080129d.0043.01 --U- 1 fsc 0x0000.000b2b52
|
|
----大於10%的塊未被清除
data_block_dump,data header at 0x3321064
===============
tsiz: 0x1f98
hsiz: 0x14
pbl: 0x03321064
bdba: 0x02000024
76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x42d
avsp=0x419
tosp=0x419
0xe:pti[0] nrow=1 offs=0
0x12:pri[0] offs=0x42d
block_row_dump:
tab 0, row 0, @0x42d
tl: 7019 fb: --H-FL-- lb: 0x2 cc: 5
col 0: [ 3] c2 4c 3c
col 1: [2000]
2f 31 30 30 37 36 62 32 33 5f 4f 72 61 43 75 73 74 6f 6d 44 61 74 75 6d 43
6c 6f 73 75 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 2: [2000]
63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 3: [2000]
63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
,,, ,,,
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 4: [1000]
63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
end_of_block_dump

End dump data blocks tsn: 8 file#: 8 minblk 36 maxblk 36



Start dump data blocks tsn: 8 file#: 8 minblk 1160 maxblk 1160
buffer tsn: 8 rdba: 0x02000488 (8/1160)
scn: 0x0000.000b2b5d seq: 0x01 flg: 0x00 tail: 0x2b5d0601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Block header dump: 0x02000488
Object id on Block? Y
seg/obj: 0x739d csc: 0x00.b2b5d itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x200040a ver: 0x01
inc: 0 exflg: 0

Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x000a.02b.00000152 0x0080a0ce.002a.6a C--- 0 scn 0x0000.000b218f
0x02 0x0003.008.000001d6 0x00801a84.004a.01 C--- 0 scn 0x0000.000b2b52
|
|
----小於10%的塊被清除

data_block_dump,data header at 0x3321064
===============
tsiz: 0x1f98
hsiz: 0x14
pbl: 0x03321064
bdba: 0x02000488
76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x42d
avsp=0x419
tosp=0x419
0xe:pti[0] nrow=1 offs=0
0x12:pri[0] offs=0x42d
block_row_dump:
tab 0, row 0, @0x42d
tl: 7019 fb: --H-FL-- lb: 0x0 cc: 5
col 0: [ 3] c3 02 30
col 1: [2000]
2f 33 39 32 39 37 38 38 39 5f 42 79 74 65 43 6f 6d 70 6f 6e 65 6e 74 52 61
73 74 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 2: [2000]
63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 3: [2000]
63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 4: [1000]
63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
end_of_block_dump
End dump data blocks tsn: 8 file#: 8 minblk 1160 maxblk 1160


--再次訪問這些塊時,會被清除


SQL> set autot on
SQL> select count(*) from t2;

COUNT(*)
----------
1000

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T2'


Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1265 consistent gets
0 physical reads
15600 redo size --產生很多的REDO資訊,用於塊清除
376 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed

SQL> /

COUNT(*)
----------
1000


Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T2'

Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1005 consistent gets
0 physical reads
0 redo size --再訪問就沒有REDO了
376 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed



--再來看清除的資料塊資訊
SQL> alter system dump datafile 8 block 36;

系統已更改。

SQL> alter system dump datafile 8 block 1160;

系統已更改。


Start dump data blocks tsn: 8 file#: 8 minblk 36 maxblk 36
buffer tsn: 8 rdba: 0x02000024 (8/36)
scn: 0x0000.000b3059 seq: 0x01 flg: 0x02 tail: 0x30590601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Block header dump: 0x02000024
Object id on Block? Y
seg/obj: 0x739d csc: 0x00.b2c2a itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x2000021 ver: 0x01
inc: 0 exflg: 0

Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0008.000.000001d7 0x00800761.003e.01 C--- 1 fsc 0x0000.000b3059
0x02 0x0003.008.000001d6 0x0080129d.0043.01 C--- 0 scn 0x0000.000b2b52
|
|
----
大於10%的塊也被清除成功
data_block_dump,data header at 0x3321064
===============
tsiz: 0x1f98
hsiz: 0x14
pbl: 0x03321064
bdba: 0x02000024
76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x42d
avsp=0x419
tosp=0x419
0xe:pti[0] nrow=1 offs=0
0x12:pri[0] offs=0x42d
block_row_dump:
tab 0, row 0, @0x42d
tl: 7019 fb: --H-FL-- lb: 0x0 cc: 5
col 0: [ 3] c2 4c 3c
col 1: [2000]
2f 31 30 30 37 36 62 32 33 5f 4f 72 61 43 75 73 74 6f 6d 44 61 74 75 6d 43
6c 6f 73 75 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 2: [2000]
63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 3: [2000]
63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 4: [1000]
63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
end_of_block_dump
End dump data blocks tsn: 8 file#: 8 minblk 36 maxblk 36

Start dump data blocks tsn: 8 file#: 8 minblk 1160 maxblk 1160
buffer tsn: 8 rdba: 0x02000488 (8/1160)
scn: 0x0000.000b305a seq: 0x01 flg: 0x00 tail: 0x305a0601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Block header dump: 0x02000488
Object id on Block? Y
seg/obj: 0x739d csc: 0x00.b305a itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x200040a ver: 0x01
inc: 0 exflg: 0

Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0008.000.000001d7 0x00801ec8.0046.01 C--- 0 scn 0x0000.000b3059
0x02 0x0003.008.000001d6 0x00801a84.004a.01 C--- 0 scn 0x0000.000b2b52
|
|
----小於10%的塊不變

data_block_dump,data header at 0x3321064
===============
tsiz: 0x1f98
hsiz: 0x14
pbl: 0x03321064
bdba: 0x02000488
76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x42d
avsp=0x419
tosp=0x419
0xe:pti[0] nrow=1 offs=0
0x12:pri[0] offs=0x42d
block_row_dump:
tab 0, row 0, @0x42d
tl: 7019 fb: --H-FL-- lb: 0x0 cc: 5
col 0: [ 3] c3 02 30
col 1: [2000]
2f 33 39 32 39 37 38 38 39 5f 42 79 74 65 43 6f 6d 70 6f 6e 65 6e 74 52 61
73 74 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 2: [2000]
63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 3: [2000]
63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 4: [1000]
63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
... ...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
end_of_block_dump
End dump data blocks tsn: 8 file#: 8 minblk 1160 maxblk 1160

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/703656/viewspace-1008650/,如需轉載,請註明出處,否則將追究法律責任。

相關文章