知识大全 Oracle(blockcleanout)的块清除
Posted 系统
篇首语:天下无难事,只怕有心人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle(blockcleanout)的块清除相关的知识,希望对你有一定的参考价值。
Oracle(blockcleanout)的块清除 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Clean out有 种: fast mit cleanout
delayed block cleanout
如果一个事务(transaction)修改不超过 %buffer cache的数据块时 oracle做的是fast mit cleanout
如果一个事务(transaction)修改的块超过 % buffer cache 那么 超过的块 就执行delayed block cleanout
在事务mit前 修改的数据块已经写入硬盘 当发生mit时 oracle并不会把block重新读入内存来做cleanout 这样成本太高
而是把cleanout留到下一次对此块的访问(select update)时完成
下面我们来简单看一下这两种情况:
搭建环境
SQL> show parameter db_cache; NAME TYPE VALUE db_cache_size big integer
只需更改 M/ = M的数据量就会触发DELAY CLEAN OUT
SQL> create table t (id int col char( ) col char( ) col char( ) col char( ));
表已创建
行一个块
SQL> insert into t select object_id object_name from all_objects where rownum <= ; 已创建 行 SQL> mit; SQL> select * from ( select rownum rn id dbms_rowid rowid_relative_fno(rowid) file# dbms_rowid rowid_block_number(rowid) block# from t ) where rn= or rn= ; RN ID file# block# fast clean out 快速块清除 SQL> update t set id=id col =col col = c col = c col = c where id= ; 第 块 ROWS UPDATED SQL> select xidusn xidslot xidsqn ubafil ubablk ubarec from v$transaction; XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBAREC SQL> MIT;
提交成功
SQL> alter system dump datafile block ;
系统已更改
Start dump data blocks tsn: file#: minblk maxblk buffer tsn: rdba: x ( / ) scn: x b db seq: x flg: x tail: x db frmt: x cval: x type: x =trans data Block header dump: x Object id on Block? Y seg/obj: x d csc: x b db itc: flg: E typ: DATA brn: bdba: x ver: x inc: exflg: Itl Xid Uba Flag Lck Scn/Fsc x x a b x a c a a C scn x b f x x a x a cf a b fsc x | |
这里的FLAG已经清除
data_block_dump data header at x =============== tsiz: x f hsiz: x pbl: x bdba: x flag= ntab= nrow= frre= fsbo= x fseo= x d avsp= x tosp= x xe:pti[ ] nrow= offs= x :pri[ ] offs= x d block_row_dump: tab row @ x d tl: fb: H FL lb: x cc: col : [ ] c c c col : [ ] f f f f d d c f
数据内容部分省略
col : [ ] col : [ ] col : [ ] end_of_block_dump End dump data blocks tsn: file#: minblk maxblk delay clean out 延时块清除 SQL> update t set id=id col =col col = c col = c col = c ; M的更新数据 已更新 行 SQL> select xidusn xidslot xidsqn ubafil ubablk ubarec from v$transaction; XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBAREC SQL> MIT;
提交成功
SQL> alter system dump datafile block ; 大于db_cache_size %的块
系统已更改
SQL> alter system dump datafile block ; 小于db_cache_size %的块
系统已更改
Start dump data blocks tsn: file#: minblk maxblk buffer tsn: rdba: x ( / ) scn: x b b seq: x flg: x tail: x b frmt: x cval: x type: x =trans data Block header dump: x Object id on Block? Y seg/obj: x d csc: x b db itc: flg: E typ: DATA brn: bdba: x ver: x inc: exflg: Itl Xid Uba Flag Lck Scn/Fsc x x a b x a c a a C scn x b f x x d x d U fsc x b b | |
大于 %的块未被清除
data_block_dump data header at x =============== tsiz: x f hsiz: x pbl: x bdba: x flag= ntab= nrow= frre= fsbo= x fseo= x d avsp= x tosp= x xe:pti[ ] nrow= offs= x :pri[ ] offs= x d block_row_dump: tab row @ x d tl: fb: H FL lb: x cc: col : [ ] c c c col : [ ] f f f f d d c f col : [ ] col : [ ] col : [ ] end_of_block_dump End dump data blocks tsn: file#: minblk maxblk Start dump data blocks tsn: file#: minblk maxblk buffer tsn: rdba: x ( / ) scn: x b b d seq: x flg: x tail: x b d frmt: x cval: x type: x =trans data Block header dump: x Object id on Block? Y seg/obj: x d csc: x b b d itc: flg: E typ: DATA brn: bdba: x a ver: x inc: exflg: Itl Xid Uba Flag Lck Scn/Fsc x x a b x a ce a a C scn x b f x x d x a a C scn x b b | |
小于 %的块被清除
data_block_dump data header at x =============== tsiz: x f hsiz: x pbl: x bdba: x flag= ntab= nrow= frre= fsbo= x fseo= x d avsp= x tosp= x xe:pti[ ] nrow= offs= x :pri[ ] offs= x d block_row_dump: tab row @ x d tl: fb: H FL lb: x cc: col : [ ] c col : [ ] f f f d f e e col : [ ] col : [ ] col : [ ] end_of_block_dump End dump data blocks tsn: file#: minblk maxblk
再次访问这些块时 会被清除
SQL> set autot on SQL> select count(*) from t ; COUNT(*) Execution Plan SELECT STATEMENT Optimizer=CHOOSE SORT (AGGREGATE) TABLE ACCESS (FULL) OF T Statistics recursive calls db block gets consistent gets physical reads redo size
产生很多的REDO信息 用于块清除
bytes sent via SQL*Net to client bytes received via SQL*Net from client SQL*Net roundtrips to/from client sorts (memory) sorts (disk) rows processed SQL> / COUNT(*) Execution Plan SELECT STATEMENT Optimizer=CHOOSE SORT (AGGREGATE) TABLE ACCESS (FULL) OF T Statistics recursive calls db block gets consistent gets physical reads redo size
再访问就没有REDO了
bytes sent via SQL*Net to client bytes received via SQL*Net from client SQL*Net roundtrips to/from client sorts (memory) sorts (disk) rows processed
再来看清除的数据块信息
SQL> alter system dump datafile block ;
系统已更改
SQL> alter system dump datafile block ;
系统已更改
Start dump data blocks tsn: file#: minblk maxblk buffer tsn: rdba: x ( / ) scn: x b seq: x flg: x tail: x frmt: x cval: x type: x =trans data Block header dump: x Object id on Block? Y seg/obj: x d csc: x b c a itc: flg: E typ: DATA brn: bdba: x ver: x inc: exflg: Itl Xid Uba Flag Lck Scn/Fsc x x d x e C fsc x b x x d x d C scn x b b | |
大于 %的块也被清除成功
data_block_dump data header at x =============== tsiz: x f hsiz: x pbl: x bdba: x flag= ntab= nrow= frre= fsbo= x fseo= x d avsp= x tosp= x xe:pti[ ] nrow= offs= x :pri[ ] offs= x d block_row_dump: tab row @ x d tl: fb: H FL lb: x cc: col : [ ] c c c col : [ ] f f f f d d c f col : [ ] col : [ ] col : [ ] end_of_block_dump End dump data blocks tsn: file#: minblk maxblk Start dump data blocks tsn: file#: minblk maxblk buffer tsn: rdba: x ( / ) scn: x b a seq: x flg: x tail: x a frmt: x cval: x type: x =trans data Block header dump: x Object id on Block? Y seg/obj: x d csc: x b a itc: flg: E typ: DATA brn: bdba: x a ver: x inc: exflg: Itl Xid Uba Flag Lck Scn/Fsc x x d x ec C scn x b x x d x a a C scn x b b | |
小于 %的块不变
cha138/Article/program/Oracle/201311/17960相关参考