Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2758236
  • 博文数量: 389
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 4773
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-16 23:29
文章分类

全部博文(389)

分类: Oracle

2013-08-10 12:21:13

                                                                                确定表的HWM
     对一些经常DML很频繁表的,HWM的可能比较高,这时候对性能影响较大。可以通过计算实际的占用的块数和数据字典的记录相比对
就可以确定当前的HWM处于一个什么样的状态.如以下PLSQL代码达到类似的目的

declare
   i_blocks integer;
   i_tableblocks integer;
   i_tablename varchar2(500);
   i_sql varchar2(500);
   cursor i_t is
   select table_name,blocks
      from dba_tables
      where owner='TEST' and temporary='N';
  begin
  if i_t%isopen = true
          then close i_t;
         end if;    
open i_t;
       loop
         fetch i_t into i_tablename,i_tableblocks;
         exit when i_t%NOTFOUND;
           i_sql := 'select sum(distinct dbms_rowid.rowid_block_number(rowid)) from TEST."'  || i_tablename||'"';
           execute immediate i_sql into i_blocks;
            dbms_output.put_line(i_tablename||' occupy blocks '||i_tableblocks||',actual blocks'||i_blocks);
             end loop; 
    end;

执行之前需要收集统计信息estimate_percent=>100,以达到对表很精确的统计.在生产环境上对整个schema进行百分之百的收集可能会比较

耗时,建议对单个表或是需要特别注意的表进行逐一处理。

阅读(2895) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~