缥缈游侠-logzgh
===========================================================
IBM rpm系统(oracle global temporary table)的调优
===========================================================
我们公司有一套ibm rpm系统,运行在oracle数据库上,今天听说这套系统一直以来都很慢。让IBM调优,IBM也拿不出什么优化方案,说这套系统跑在db2上就很快。听到这儿我就觉的奇怪,肯定是哪方面出了问题。

从交流中得知这套系统有大量的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以上是支持的。

logzgh 发表于:2008.02.01 16:23 ::分类: ( Oracle技术 ) ::阅读:(1043次) :: 评论 (4)
re: IBM rpm系统(oracle global temporary table)的调优 [回复]

试了一下,win+ora9207下,用dbms_stats是可以收集临时表统计信息的。你的oracle是什么版本的?

luzp 评论于: 2008.02.02 10:03
re: IBM rpm系统(oracle global temporary table)的调优 [回复]

不好意思,我没说清楚。
我说的是gather_schema_stats,不是gather_table_stats。

logzgh 评论于: 2008.02.02 17:01
re: IBM rpm系统(oracle global temporary table)的调优 [回复]

不好意思,我没说清楚。
我说的是gather_schema_stats,不是gather_table_stats。

logzgh 评论于: 2008.02.02 17:01
re: IBM rpm系统(oracle global temporary table)的调优 [回复]

经典案例laughing

玉面飞龙 评论于: 2008.02.14 20:20

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)




自我介绍
切换风格
新闻聚合
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
网站链接...