分类: Oracle
2009-07-06 11:01:09
对命令与工具包的一些总结:
1、对于分区表,建议使用DBMS_STATS,而不是使用Analyze语句。
a)可以并行进行,对多个用户,多个Table
b)可以得到整个分区表的数据和单个分区的数据。
c)可以在不同级别上Compute Statistics:单个分区,子分区,全表,所有分区
d)可以导出统计信息
e)可以用户自动收集统计信息(alter table monitor )
2、DBMS_STATS的缺点:
a)不能Validate Structure (注意:validate structure主要在于校验对象的有效性. compute statistics在于统计相关的信息)。
b)不能收集CHAINED ROWS(行链接),不能收集CLUSTER TABLE(簇表)的信息,这两个仍旧需要使用Analyze语句。
c) DBMS_STATS默认不对索引进行Analyze,因为默认Cascade是False,需要手工指定为True。即GATHER_TABLE_STATS:分析表信息,当cascade为true时,分析表、列(索引)信息。
Analyze是同时更新表和索引的统计信息,而dbms_stats会先更新表的统计信息,然后再更新索引的统计信息(默认Cascade是False),这里就有一个问题,就是当表的统计信息更新后,而索引的统计信息没有被更新,这时候cbo就有可能选择错误的plan 。
3、对于oracle 9里面的External Table,Analyze不能使用,只能使用DBMS_STATS来收集信息。
Analyze的三大功能:
搜集和删除索引、表和簇的统计信息
验证表、索引和簇的结构ITPUB个人空间
鉴定表和簇的行迁移(migrated rows)和行链接(chained rows)
CBO是Oracle推荐使用的优化方式,要想使用好CBO,使语句发挥最大效能,必须保证统计数据的及时性。统计信息的生成可以有完全计算法和抽样估算法。SQL例句如下:
完全计算法:analyze table abc compute statistics;
抽样估算法(抽样20%):analyze table abc estimate statistics sample 20 percent;
对表作完全计算所花的时间相当于做全表扫描,抽样估算法由于采用抽样,比完全计算法的生成统计速度要快,如果不是要求要有非常精确的数据的话,尽量采用抽样分析法。建议对表分析采用抽样估算,对索引分析可以采用完全计算。