OracleTT.Com - 搜集互联网免费Oracle教程,免费Oracle视频教程,起步从这里开始!

Oracle数据库学习_Oracle书籍下载_MySQL书籍下载_Oracle免费视频教程 - OracleTT.Com

当前位置: 主页 > 技术基础 >

analyze index 时validate structure和compute statistics的区别?

时间:2011-12-29 23:27来源:未知 作者:OracleTT 点击:
analyze index indexname validate structure 和 analyze index indexname compute statistics 在分析索引的时候,一般会用到以上二个命令. analyze index indexname validate structure: 是用来分析索引的数据块是否有坏

analyze index indexname validate structure 和 analyze index indexname compute statistics

在分析索引的时候,一般会用到以上二个命令.

analyze index indexname validate structure:是用来分析索引的数据块是否有坏块,以及根据分析得到的数据(存放在index_stats)來判断索引是否需要重新建立。

什么样的index需要rebuild?

当一个table经常进行DML操作时,它的索引会存在许多block空间的浪费,这是因为index block中的记录只有在全部表示为不可用时,block 才能被加入到freelist中去被重新利用。所以我们需要寻找那些浪费空间很严重的index。

INDEX_STATS stores information from the last ANALYZE INDEX ... VALIDATE STRUCTURE statement.
上面语句意思是说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;

validate structure有二中模式: online,offline,默认是offline模式。以offline模式分析时, 会对表加一个4级別的锁(表共享),对run系统可能造成一定的影响。

而online模式则没有表lock的影响,但当以online模式分析时,在视图index_stats没有统计信息。

analyze index index1 compute statistics:是用来统计index的分析信息,来为CBO服务的。从9i开始,Oracle以建议使用dbms_stats package代替 analyze 了。

(责任编辑:OracleTT)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片