发表于: 2008.02.01 16:23
分类: Oracle技术
出处: http://logzgh.itpub.net/post/3185/454477
---------------------------------------------------------------
从交流中得知这套系统有大量的temporary table。
登陆系统查看果然是这样,总共600多张表格,其中450来张表格是temporary table表格。ibm这个系统真是奇怪。^_^
查看v$session_wait发现direct path read/write有不少,于是猜测是执行计划不对。把sql抓出来查看执行计划,都是走hash join的。查看统计信息,发现都有统计信息,但是临时表格上面没有统计信息。
对这么多的临时表格,只有永久表有统计信息,那么当永久表和临时表之间有关联操作时,sql语句的执行计划非常容易出错。
于是先偿试将统计信息全部干掉,速度有所提升,但是还不理想。
后来我想rpm的这些临时表,估计在实际运行当中也不会存在大量的数据,不同的时候其中的数据相差应该也不会大,那么对临时表做统计信息分析的话,应该是有用的。
于是先用dbms_stat对整个schema做统计信息分析,但是发现临时表上面还是没有统计信息。后来改用analyze table后,统计信息就有了。说明dbms_stats无法对临时表做统计信息分析。
这样分析后,再登陆系统,整个系统的速度就非常快了。
总结一下有两个知识点:
1.dbms_stats不能对临时表做分析,如果要对临时表做分析,需要采用analyze table。
2.对有不少临时表的系统,如果采有cost的话,对临时表也要做分析,否则会带来性能极大的恶化。这里还需要注意8i临时表是不支持统计信息的,9i以上是支持的。











