Oracle Freelist和HWM的性能优化

来源:pcdog 作者:佚名 2008-04-02 出处:pcdog.com

oracle  oracle数据库  存储过程  
上一页 1 2 3 4 5 6 7 8 下一页 

    对非segment header的data block的dump方法和上述类似。data block的结构和segment header block不一样,如果需要了解,可查阅参考文献和资料。


    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以上的空间。比如:


更多内容请看PCdog.com--性能调优专题
上一页 1 2 3 4 5 6 7 8 下一页 
上一篇:SQL Server和Oracle的真正区别
下一篇:归纳一下ORACLE中的数据类型