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

oracle temp表空间暴涨-part2

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

表空间从类型上有若干分类的方式,一种是按照“文件file”的大小,区别为small file tablespace和big file tablespace。另一种是按照表空间用途而定的。此种分类方法可以将表空间划分为持久化表空间(Permanent Tablespace)、Undo表空间和临时表空间(Temporary Tablespace)。
Temporary临时表空间是Oracle一种内部空间调控的产物。根据Oracle官方文档中的介绍,Temporary表空间主要是针对session会话自身的操作使用的。
当一个会话通过SQL或者PL/SQL将数据集合获取,进行大面积的sort或者group by操作时,会话会严重的消耗PGA资源。PGA是针对会话自身特有信息的一块内存区域,用于保存会话自身特有、无法与其他会话共享的信息。如果数据集很大,这样对内存PGA的资源消耗就会很大。Oracle在这个时候,就会采用类似操作系统虚拟内存技术的方法,从硬盘上借一块空间给PGA置换使用,缓解PGA的不足。
在使用Temporary表空间的时候,是系统自动完成的临时段segment对象创建和销毁。这个过程对用户会话而言是透明的。
临时表空间对应的文件就是临时文件temp file,在Oracle中可以使用dba_temp_files视图进行查询。
SQL> col file_name for a50;
SQL> select file_name, bytes/1024/1024, AUTOEXTENSIBLE from dba_temp_files;
FILE_NAME                                         BYTES/1024/1024 AUTOEXTENSIBLE
-------------------------------------------------- ---------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP01.DBF              123YES
通常,在系统创建的时候,Oracle会创建临时表空间Temp作为系统默认临时表空间Temporary Tablespace。而且,通常Temp表空间都是设置为支持自动拓展的。
2、问题分析
回到那位兄弟的问题,简单归纳出来就是“系统中出现批作业缓慢的现象,发现临时表空间暴增”。
从上面我们对于Temp表空间的分析介绍,我们可以初步认为临时表空间的暴增是一个结果,而不是一个原因。或者说,至少是某个原因的结果。
什么意思呢?首先,Oracle文件有自动膨胀autoextend的功能,但是却没有自动缩减的能力。临时表空间容纳的对象,都是系统创建、管理的临时段对象。当会话结束、SQL命令结果返回的时候,临时表空间的内容是可以回收的。所以,Temp表空间的自动膨胀大小结果不是一个累积的效果,而是一个峰值效果。

TAG:

 

评分:0

我来说两句

Open Toolbar