关于10g 表分析采样的官方说明
很多客户的数据库从9i升到10g 后都出现了性能问题,有些甚至比9i时下降超过50%。后来经过分析绝大多数都是和大量SQL使用了错误的执行计划有关。为什么10g 会出现这么严重的执行计划偏差呢?在9i的时代里,我们都自己编写分析脚本来对表和索引进行分析,在使用采样比例上,大家一般都比较保守,基本上都在20%以上。而10G提供了一个令人心动的技术就是自动分析,10g 数据库由于取消了RBO优化模式,缺省的优化器模式变为了ALL_ROWS,因此对分析数据的依赖程度更高,因此Oracle自带了一个标准的分析脚本,并且定期进行分析。不过随着这种新技术的使用,问题就出现了,oracle 的自动分析脚本往往只做很少量的采样,导致大量的表的评估信息出现严重偏差。最终很多客户选择了停止自动采集作业,改为手工分析。
以前在和一些Oracle的工程师讨论这个问题的时候,大家都觉得Oracle的AUTO SAMPLE是很不错的,是Oracle官方建议的,应该不会有问题,只有少量的系统需要调整,自定义采集作业脚本。今天我在整理以前的资料的时候,发现了一份METALINK的文档,发现这里的观点和我一直坚持的观点很近似。现在拿出来和大家共享。
全文参考: