Oracle(block clean out)的块清除
2008-09-02 12:45:53 来源:WEB开发网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;
- ››oracle 恢复误删除的表和误更新的表
- ››Oracle分页查询排序数据重复问题
- ››Oracle创建dblink报错:ORA-01017、ORA-02063解决
- ››Oracle 提高SQL执行效率的方法
- ››Oracle 动态查询,EXECUTE IMMEDIATE select into...
- ››Oracle 11g必须开启的服务及服务详细介绍
- ››oracle性能34条优化技巧
- ››oracle数据库生成随机数的函数
- ››Oracle 数据库表空间容量调整脚本
- ››oracle单库彻底删除干净的方法
- ››Oracle创建表空间、创建用户以及授权、查看权限
- ››oracle 中 UPDATE nowait 的使用方法
更多精彩
赞助商链接