Tips:不要让临时表空间影响数据库性能

在Oracle数据库中进行排序、分组汇总、索引等到作时,会产生很多的临时数据。如有一张员工信息表,数据库中是安装记录建立的时间来保存的。如果用户查询时,使用Order BY排序语句指定按员工编号来排序,那么排序后产生的所有记录就是临时数据。对于这些临时数据,Oracle数据库是如何处理的呢?

通常情况下,Oracle数据库会先将这些临时数据存放到内存的PGA(程序全局区)内。在这个程序全局区中有一个叫做排序区的地方,专门用来存放这些因为排序操作而产生的临时数据。但是这个分区的容量是有限的。当这个分区的大小不足以容纳排序后所产生的记录时,数据库系统就会将临时数据存放到临时表空间中。这就是临时表空间的来历。看起来好像这个临时表空间是个临时工,对于数据库的影响不会有多大。其实大家这是误解这个临时表空间了。在用户进行数据库操作时,排序、分组汇总、索引这些作业是少不了,其会产生大量的临时数据。为此基本上每个数据库都需要用到临时表空间。而如果这个临时表空间设置不当的话,则会给数据库性能带来很大的负面影响。为此管理员在维护这个临时表空间的时候,不能够掉以轻心。要避免因为临时表空间设置不当影响数据库的性能。具体来说,主要需要注意如下几个方面的内容。

一、创建用户时要记得为用户创建临时表空间。

最好在创建用户时为用户指定临时表空间。如可以利用语句default temporary table space语句来为数据库设置默认的临时表空间。不过在Oracle数据库中这个不是强制的。但是笔者强烈建议这么做。因为如果没有为用户指定默认临时表空间的话,那么当这个用户因为排序等操作需要使用到临时表空间的话,数据库系统就会“自作聪明”的利用系统表空间SYSTEM来创建临时段。众所周知,这是一个系统表空间。由于在这个表空间中存放着系统运行相关的数据,一般的建议是用户的数据不能够保存在这个表空间中。那么如果将用户的临时表空间防止在这个系统表空间之内,会产生什么负面影响呢?

由于临时表空间中的数据是临时的。为此数据库系统需要频繁的分配和释放临时段。这些频繁的操作会在系统表空间中产生大量的存储碎片。当这些存储碎片比较多时,就会影响系统读取硬盘的效率,从而影响数据库的性能。其次系统表空间的大小往往是有限制的。此时临时段也来插一脚,就会占用系统表空间的大小。

为此数据库管理员需要注意一点,当没有为用户指定临时表空间时,用户排序等操作仍然需要用到临时段。此时数据库系统就会将临时段放入到系统表空间中。为此就会对数据库的性能产生不利的影响。所以笔者建议各位读者与数据库管理员,在创建用户的时候同时为用户指定一个默认的表空间,以减少临时段对系统表空间的占用。

二、合理设置PGA,减少临时表空间使用的几率。

当排序操作产生临时数据时,数据库并不是马上将其存储在临时表空间中。通常情况下,会先将这些临时数据存储在内存的PGA程序全局区内。只有当这个程序全局区无法容纳全部数据时,数据库系统才会启用临时表空间中的临时段来保存这些数据。但是众所周知,操作系统从内存中读取数据要比从硬盘中读取数据块几千倍。为此比较理想的情况是,这个程序全局区足够的大,可以容纳所有的临时数据。此时数据库系统就永远用不到临时表空间了。从而可以提高数据库的性能。

时间: 2024-11-02 21:07:13

Tips:不要让临时表空间影响数据库性能的相关文章

不要让临时表空间影响Oracle数据库性能

在Oracle数据库中进行排序.分组汇总.索引等到作时,会产生很多的临时数据.如有一张员工信息表,数据库中是安装记录建立的时间来保存的.如果用户查询时,使用Order BY排序语句指定按员工编号来排序,那么排序后产生的所有记录就是临时数据.对于这些临时数据,Oracle数据库是如何处理的呢? 通常情况下,Oracle数据库会先将这些临时数据存放到内存的PGA(程序全局区)内.在这个程序全局区中有一个叫做排序区的地方,专门用来存放这些因为排序操作而产生的临时数据.但是这个分区的容量是有限的.当这个

影响数据库性能的因素

论坛上的数据库爱好者们,对于数据库底层的各种细节,内幕,等待事件,隐藏参数等津津乐道,对于调整好一条SQL语句使之在查询优化器/查询引擎下能高性能运转具有巨大的满足感成功感,仿佛自己掌握了天下最有价值的真理,驾驭了天下最有难度的技术.但对于设计和开发出这个数据库系统的人来说,他们看到此情此景,只好躲在一边偷偷的笑了.那么问题来了,使用别人数据库的人被称为大师(如:OCM),那么自己写出一个数据库来的人又该称为什么呢?到底谁才是真正的高手呢? 数据库系统优化中的一些观点: "系统性能出现问题进行优

不让链化现象影响数据库性能

正常情况下往表中新建记录时,数据库系统会将数据写入到块并会像这行记录提供一个ROWID值.这个值记录了这条记录在硬盘上存储的位置.在更新某条记录的时候,也是如此.数据库系统会根据ROWID的值将需要更新的记录从硬盘中读取到块中;然后更新完毕后,再将块中的记录保存到硬盘对应的位置.更新过程中,ROWID列的值通常情况下不会改变. 但是如果一个块的容量不能够容纳一条记录.也就是会所,当单个数据块没有足够的空间来保存新建的一行记录或者更新的某行记录时,就会发生链化现象.到一个数据库的容量不足以容纳一条

数据库性能分析及调整一例

数据|数据库|性能 故障现象2004年6月8日上午10:00,内蒙古巴盟网通用户反映在OSS系统界面"话单查询"里查询单个用户五天的话单特别慢,查询很长时间无结果. 例如:在OSS系统界面"综合查询"内点击"收费"-〉"话单查询",键入"用户号码,起始时间:2004-01-01 00:00:00,结束时间:2004-06-01 23:00:00",点击查询后,IE进度条缓慢,很长时间不返回结果.故障分析经过

【性能优化】ORACLE数据库性能优化概述

   为了保证ORACLE数据库运行在最佳的性能状态下,在信息系统开发之前就应该考虑数据库的优化策略.优化策略一般包括服务器操作系统参数调整.ORACLE数据库参数调整.网络性能调整.应用程序SQL语句分析及设计等几个方面,其中应用程序的分析与设计是在信 分析评价ORACLE数据库性能主要有数据库吞吐量.数据库用户响应时间两项指标.数据库吞吐量是指单位时间内数据库完成的SQL语句数目:数据库用户响应时间是指用户从提交SQL语句开始到获得结果的那一段时间.数据库用户响应时间又可以分为系统服务时间和

ORACLE数据库性能优化

实际上,为了保证ORACLE数据库运行在最佳的性能状态下,在http://www.aliyun.com/zixun/aggregation/32730.html">信息系统开发之前就应该考虑数据库的优化策略.优化策略一般包括服务器操作系统参数调整.ORACLE数据库参数调整.网络性能调整.应用程序 SQL语句分析及设计等几个方面,其中应用程序的分析与设计是在信息系统开发之前完成的. 分析评价ORACLE数据库性能主要有数据库吞吐量.数据库用户响应时间两项指标.数据库吞吐量是指单位时间内数据

临时表空间与Oracle数据库性能的关系

在Oracle数据库中进行排序.分组汇总.索引等到作时,会产生很多的临时数据.如有一张员工信息表,数据库中是安装记录建立的时间来保存的.如果用户查询时,使用Order BY排序语句指定按员工编号来排序,那么排序后产生的所有记录就是临时数据.对于这些临时数据,Oracle数据库是如何处理的呢? 通常情况下,Oracle数据库会先将这些临时数据存放到内存的PGA(程序全局区)内.在这个程序全局区中有一个叫做排序区的地方,专门用来存放这些因为排序操作而产生的临时数据.但是这个分区的容量是有限的.当这个

oracle数据库清理临时表空间

本文章是一个简单的关于oracle数据库教程清理临时表空间 哦,如果你正在找oracle数据库清理临时表空间就进来看看吧. 法一.重启库 库重启时,Smon进程会完成临时段释放,TEMP表空间的清理操作,不过很多的时侯我们的库是不允许down的,所以这种方法缺少了一点的应用机会,不过这种方法还是很好用的. 法二.Metalink给出的一个方法 修改一下TEMP表空间的storage参数,让Smon进程观注一下临时段,从而达到清理和TEMP表空间的目的. SQL>alter tablespace

数据库性能检查指导方案 - Part I

数据|数据库|性能 数据库性能检查指导方案   Author: Kamus Date:2004-9   在系统稳定之后,应该按照本指导方案每个月检查一次产品数据库. 该指导方案适用于Oracle9i数据库,因为有些脚本在9i中才可以运行. 检查方式均为以sysdba身份登录数据库以后在SQLPLUS中执行命令脚本(每小节的"检查方法"部分有详细的命令脚本). 登陆数据库的命令: sqlplus "sys/password as sysdba"   一.内存性能评估