本文基于Oracle10g。
现在收集统计信息有两种方法,一是使用analyze命令,另外就是使用dbms_stats包,Oracle推荐使用dbms_stats来代替analyze。
还需要使用Analyze收集统计信息的有:
1) 行迁移/行连接 信息。可以查看v$dba_tables.chain_cnt来确定表是否有行连接/行迁移。不过使用dbms_stats无法统计这个信息,必须使用analyze table table_name compute statistics;或者analyze table table_name list chained rows into table_name;来收集。
2) Cluster table。Cluster table 必须使用analyze命令收集统计信息。
3) Validate structure。Validate structure这个命令通常用于验证索引结构信息。如果一个表上经常做delete操作,那么就需要经常对这个表上的索引进行结构验证,因为这个表上的索引可能需要重建。可以使用analyze index index_name validate structure offline;注意一定是要以offline(默认)方式收集统计信息,如果以online方式收集统计信息,那么就无法在index_stats中查找到刚才收集到的统计信息。Online方式收集统计信息不会对表加lock。而以offline方式收集统计信息会对表加lock,可能对性能有影响,一般是在系统处于空闲状态收集统计信息。
有可能需要rebuild的索引:可以查看index_stats.height ,如果高度大于等于4就可能需要rebuild,另外一个就是index_stats.del_lf_rows/index_stats.lf_rows>0.2也就是说有20%的数据被删除了,那么这个索引也需要rebuild。