不可轻言放弃,否则对不起自己!

oracle temp表空间暴涨-part3

上一篇 / 下一篇  2011-08-09 19:23:21 / 个人分类:数据库

Temp表空间增加到20G,说明在系统运行的某个阶段,由于会话并发或者其他的原因,引起系统内部排序、分组等PGA高消耗操作剧烈增加,瞬时超过了Temp原有的大小。从而引发Oracle进行Temp表空间的自动拓展,拓展到当前的大小。之后会话操作结束,临时段segment对象被回收,但是文件大小不会重新回收。所以导致了Temp表空间膨胀的事实。
那么,有什么样的原因可能导致出现瞬时Temp空间消耗高峰呢?几种可能的情况如下:
ü       系统本身特点。我们说最大使用Temp表空间的就是sort和group by操作。对一些OLAP、DSS系统而言,无论是进行报表生成还是数据整理汇总析取,都伴随着海量数据的sort或者group by。一般情况下的PGA设置是无法满足如此巨大的空间需求的,必然要消耗相当的Temp表空间。根据笔者的了解,一些数据仓库性质的系统对Temp的消耗达到几十上百G是很常见的;
ü       应用本身对SQL处理量失控。SQL是一种描述性语言,修改一条记录和修改一千万条记录的语句结构可能都是相同的。但是,对系统而言,两者的差异是天壤之别。比如,当我们尝试将获取到数据集合bulk collect到一个数组时候,要关注到可能的数据量规模。如果数据集合较小,一切都好说。但是如果数据集合达到百万级以上,那么瞬时百万条数据全部请求存放在PGA中,进而引起Temp的过量使用;
ü       第三方工具的使用。很多第三方工具,特别是带有数据分析处理的软件,通过专门的业务实体层封装SQL语句。一些时候,这种封装SQL进行连接、汇总时也会带来大量的Temp消耗;
3、问题解决
经过沟通,确认系统发生的变更情况。在最近一段时间,系统安装了BO相关组件,多用户在反复同时生成报表的时候,可能会出现Temp消耗高峰的情况。
同时,观察应用系统的部分代码,存在SQL处理量未受控的情况,建议开发组根据工作进度情况进行重构处理。
至于说特定SQL执行时间过长,通过诊断(或者AWR、ASH)确定了问题SQL,进行执行计划修正后问题解决。

TAG:

 

评分:0

我来说两句

Open Toolbar