分析b-tree索引的好视图index_stats(http://space.itpub.net/?uid-780947-action-viewspace-itemid-368892)

来源:互联网 发布:广发股票交易软件 编辑:程序博客网 时间:2024/04/25 19:49
 "INDEX_STATS" stores information from the lastANALYZE INDEX ... VALIDATE STRUCTUREstatement.
上面语句意思是说index_stats存储最后一次对索引分析结构的信息.
  判断一个所以是否需要重建,我们介绍一个简单的方法:对一个索引进行结构分析后,如果该索引占用超过了一个数据块,且满足以下条件之一:B-tree树的高度大于3;使用百分比低于75%;数据删除率大于15%,就需要考虑对索引重建:
analyze index t_test1_idx1 validate structure;
 
Index analyzed.
 
SQL> select btree_space, -- if > 8192(块的大小)
  2         height, -- if > 3
  3         pct_used, -- if < 75
  4         del_lf_rows/(decode(lf_rows,0,1,lf_rows)) *100 as deleted_pct -- if > 20%
  5  from index_stats;
 
BTREE_SPACE     HEIGHT   PCT_USED DELETED_PCT
----------- ---------- ---------- -----------
     880032          2         89           0
 

如果超出了if 后面的值即可能需要进行  index rebuild.
注:index_stats只能在执行analyze的语句的session会话中看到数值,另外的会话是看不到的.即当前会话只能看到当前analyze分析后的结果.
--
可以用下面的过程分析所有的索引,将其写入一张普通表中
DECLARE
BEGIN
    EXECUTE IMMEDIATE 'truncate table stats_indexes';
    FOR REC IN (SELECT INDEX_NAME FROM USER_INDEXES WHERE TABLE_OWNER = 'CITRIX') LOOP
        EXECUTE IMMEDIATE 'analyze index ' || REC.INDEX_NAME || ' validate structure';
        INSERT INTO STATS_INDEXES
            SELECT * FROM INDEX_STATS;
        COMMIT;
    END LOOP;
END;

参考:
  http://www.hellodba.com/Doc/oracle_IO(6).htm
  http://www.lslnet.com/linux/f/docs1/i49/big5338353.htm