全部博文(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进行百分之百的收集可能会比较
耗时,建议对单个表或是需要特别注意的表进行逐一处理。