WEB开发网
开发学院数据库Oracle Oracle(block clean out)的块清除 阅读

Oracle(block clean out)的块清除

 2008-09-02 12:45:53 来源:WEB开发网   
核心提示:Clean out有2种: fast commit cleanout delayed block cleanout1,如果一个事务(transaction)修改不超过10%buffer cache的数据块时,oracle做的是fast commit cleanout,Oracle(block clean out)的块清

Clean out有2种: fast commit cleanout

delayed block cleanout

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>showparameterdb_cache;   NAMETYPEVALUE   -----------------------------------------------------------------------------   db_cache_sizebiginteger58720256

--只需更改50M/10=5M的数据量就会触发DELAY CLEAN OUT

SQL>createtablet2(idint,col1char(2000),col2char(2000),col3char(2000),col4char(1000));  

表已创建。

--1行一个块,

SQL>insertintot2selectobject_id,object_name,’1’,’1’,’1’fromall_objectswhererownum<=1000;   已创建1000行。   SQL>commit;   SQL>select*from(   2selectrownumrn,id,dbms_rowid.rowid_relative_fno(rowid)"file#",dbms_rowid.rowid_block_number(rowid)"block#"fromt2)   3wherern=1orrn=1000;   RNIDfile#block#   ----------------------------------------   17559836   10001470081160   --fastcleanout快速块清除   SQL>updatet2setid=id,col1=col1,col2=’c’,col3=’c’,col4=’c’whereid=’7559’;--第36块   1ROWSupdateD   SQL>selectxidusn,xidslot,xidsqn,ubafil,ubablk,ubarecfromv$transaction;   XIDUSNXIDSLOTXIDSQNUBAFILUBABLKUBAREC   ----------------------------------------------------------   102233924116711   SQL>COMMIT;

1 2 3 4 5 6  下一页

Tags:Oracle block clean

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接