Oracle Freelist和HWM原理探讨及相关性能优化[16]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 youbo2004 的 blog

3.2 提取hwm信息

3.2.1 hwm位置

hwm位置按下面的公式计算:

    hwm = useed byte = total bytes - unused blocks

total bytes和unused blocks都可以用show_space提取。

还可以通过analyze tables得到hwm信息. dba_tables视图中包含了可用于各表空间分析的列。其中blocks代表已使用过的块即hwm,empty_blocks代表未使用的空间。

3.2.1 hwm下空间利用信息

要比较有数据行的块的块数和high water mark下总块数,可以用下面的公式来展示hwm下未用空间的比例。

 

p = 1- r/h

r:有数据行的块的块数

h:hwm下的块数.

r可以通过如下方法获得:

oracle7:

select count(distinct substr(rowid, 15,4) || substr(rowid, 1,8) )  from schema.table;

oracle8 and oracle9:

select count(distinct substr(rowid, 7,3) || substr(rowid, 10,6) )  from schema.table;

如果公式计算的结果 p是0,就不需要对表进行重建。如果结果p大于0,应该考虑系统状况和应用需要来决定是否需要总组表。

4.优化

4.1手工回收存储空间

high water mark以上的块对性能没有影响,但是会耗费空间。如何空间大小是一个考虑的问题,就可以决定回收空块。

假设表t1的存储示意图如图2.5所示,使用alter table ... deallocate unused语句可以回收hwm以上的空间。比如:

alter table t1 deallocate unused;

回收后t1的存储示意如图4.1.1

本文关键:Oracle Freelist和HWM原理探讨及相关性能优化
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top