`

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

阅读更多

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

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

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

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

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

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

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

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

  但是这毕竟只是一个理想。由于内存大小等多方面的限制,这个PGA程序区的大小往往是有限制的。所以在进行一些大型的排序操作时,这个临时表空间仍然少不了。现在数据库管理员可以做的就是合理设置这个PGA程序全局区的大小,尽量减少临时表空间使用的几率。如在实际工作中,数据库管理员可以根据需要来设置初始化参数SORT_AREA_SIZE参数。这个参数主要控制这个PGA程序全局区内排序区的大小。通常情况下,如果这个数据库系统主要用来查询并且需要大量的排序、分组汇总、索引等操作时,那么可以适当调整这个参数,来扩大PGA分区的大小。相反,如果这个系统主要用于更新操作,或者在这个数据库服务器上还部署由其他的应用程序,那么这个PGA分区就不能够占用太多的内存,以防止对其他应用程序产生不利的影响。所以说,数据库官员不能够一刀切,需要根据实际情况来调整。在必要的情况下,可以增加系统内存来增加PGA分区的大小,从而降低临时表空间的使用几率,以提高数据库的排序、分组汇总等操作的性能。

  总之,如果临时段被频繁使用的话,由于内存与硬盘在性能上的差异,从而会降低数据库的性能。为此在平时工作中,数据库管理员还需要监控临时表空间的使用情况,以判断是否需要采取措施来减少临时表空间的使用来提高数据库的查询性能。为了实现这个目的,笔者建议数据库管理员可以查看 v$sort_segment这张动态性能视图。通过这张动态性能视图可以查看系统排序段(临时段的一种)的使用情况。另外通过动态性能视图 v$sort_usage还可以查询使用排序段的用户与会话信息。从而为数据库管理员优化数据库性能提供数据上的支持。对于这个排序段,笔者还要说明一点。对于排序段来说,同一个例程的所有SQL语句(如果需要排序操作的话)都将共享同一个排序段。并且排序段在第一次需要用到时被创建。排序完成后这个排序段不会被释放,只有在这个历程关闭后排序段才会被释放。为此以上两张视图要综合起来分析,才能够得到数据库管理员想要的信息。

  三、要为临时表空间保留足够的硬盘空间。

  其他表空间对应的数据文件,在其创建时就会被完全分配和初始化,即在其创建时就会被分配存储空间。但是临时表空间对应的临时文件则不同。如在 Linux操作系统中,临时表空间创建时系统是不会分配和初始化临时文件的。也就是说,不会为临时文件分配存储空间。只有临时数据出现需要用到临时文件的时候,系统才会在硬盘上分配一块地方用来保存临时文件。此时就可能会产生一个问题,即当需要用到临时文件系统为其分配空间的时候,才会先系统分区中没有足够的存储空间了。此时就会产生一些难以预料的后果。

  为此对于这些临时文件,数据库管理员最好能够预先为其保留足够的空间。如在Linux操作系统中,可以将其防止在一个独立的分区内,不允许其他应用程序使用。如此的话,就不用担心临时文件没有地方存储了。另外由于临时表空间主要用来存放一些排序用的临时文件。为此如果能够将这个临时表空间存放在性能比较好的分区中,还可以提高数据库系统读取临时表空间中数据的速度。另外由于系统需要频繁分配临时表空间中的数据,为此临时表空间所在的分区会出现比较多的碎片。此时如果将临时表空间存放在一个独立的分区内,那么数据库管理员就可以单独对这个分区进行碎片整理,从而提高这个分区的性能。所以无论出于什么原因,将临时表空间防止在一个独立的分区内,是一个不错的想法。不仅可以保证临时文件有存储的空间,而且还可以提高数据库的性能。

  对于临时表空间最后需要说明的是,默认情况下这个临时表空间对各个用户都是共享的。也就是说每个连接到数据库的用户都可以使用默认的临时表空间。数据库管理员可以为其指定其他的临时表空间。一般来说,只需要一个临时表空间即可。

分享到:
评论

相关推荐

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

    - 文件"不要让临时表空间影响数据库性能 - Oracle - 2.mht"可能详细讨论了临时表空间对数据库性能的具体影响及实例。 - 文件"不要让临时表空间影响数据库性能 - Oracle - 3.mht"可能提供了实际的配置和优化步骤,...

    NC6.5 数据库参考脚本及临时表空间配置.pdf

    根据提供的文件信息,本文将详细说明关于“NC6.5 数据库参考脚本及临时表空间配置”的知识点。 首先,文档标题“NC6.5 数据库参考脚本及临时表空间配置.pdf”指出了文件内容涉及三个方面:NC6.5数据库、参考脚本...

    主流数据库中临时表的使用

    * 临时表的使用可能会增加数据库的负载,影响数据库的性能。 临时表是数据库管理系统中的一个重要组件,能够提高处理效率,提高数据的一致性和可靠性,降低存储成本。但是,临时表也存在一些缺点,需要在使用时进行...

    MySQL临时表空间优化:提升数据库性能的关键

    ### MySQL 临时表空间优化:提升数据库性能的关键 #### MySQL 特点概述 MySQL 是一个广泛使用的开源关系型数据库管理系统(RDBMS),基于 SQL 语言。它作为 LAMP 技术栈的一部分,在构建动态网站和 Web 应用程序...

    Oracle临时表空间不足和批处理缓慢问题探讨.pdf

    9. SQL 语句的编写对性能的影响:SQL 语句的编写对性能有着重要的影响,糟糕的 SQL 语句编写可能会导致临时表空间不足和批处理缓慢的问题。 10. 应用逻辑的优化:应用逻辑的优化对解决问题也有着重要的影响,需要从...

    学习oracle创建一个表空间创建临时表空间创建用户表空间资源的权限

    在Oracle数据库系统中,表空间(Tablespace)是存储数据对象(如表、索引、视图等)的逻辑单位,而临时表空间(Temporary Tablespace)则用于存储临时数据,比如排序或联接操作产生的中间结果。创建和管理表空间及...

    Oracle 临时表空间使用注意

    这些操作在处理大量数据时尤为常见,因此了解临时表空间的使用注意事项对于优化数据库性能至关重要。 首先,临时表空间是每个用户在Oracle数据库中进行操作时的默认工作区域。当用户进行如大型查询、创建索引或执行...

    Oracle释放临时表空间脚本

    在Oracle数据库管理中,临时表空间(Temporary Tablespace)的管理是一项非常重要的任务。合理的管理和优化临时表空间不仅可以提高系统的性能,还可以帮助解决空间不足等问题。本文将详细介绍如何通过SQL脚本进行...

    DB2系统临时表空间过大引发的性能问题-contracted.doc

    DB2系统临时表空间过大可能引发严重的性能问题,这在实际操作中表现为SQL语句执行时间显著增加。本文以某银行的DB2数据库系统为例,深入探讨了如何诊断和解决此类问题。 首先,当遇到系统响应变慢、ACTIVE SESSION...

    如何解决Oracle8i数据库临时表空间满的问题.pdf

    - 增加临时表空间的大小:可以通过为现有的临时表空间添加更多的磁盘空间,或者创建新的临时表空间来增加临时表空间的总容量。 - 清理临时表空间:可以通过删除不再需要的临时段来释放空间,或者使用DBMS_SPACE_...

    oracle-临时表空间

    ### Oracle 临时表空间详解 #### 一、Oracle表空间概览 在Oracle数据库系统中,数据被组织成多个逻辑单元,这些单元被称为表空间。每个表空间由一个或多个物理磁盘文件(称为数据文件)组成,并且是数据库中的最高...

    NC6.1 数据库参考脚本及临时表要求

    数据库临时表空间是数据库存储临时数据的区域,它对数据库性能有着重要的影响。在执行大规模数据处理任务时,合理配置临时表空间能有效提高数据库的处理能力。 对于SQL Server数据库,参考脚本的主要内容包括创建...

    oracle11g创建临时表空间组

    ### Oracle 11g 创建临时表空间组 在Oracle 11g R2版本中,引入了...总之,使用临时表空间组是Oracle 11g R2中的一个重要优化策略,它可以帮助数据库管理员更高效地管理和利用存储资源,提高系统的整体性能和稳定性。

    一个释放临时表空间实例

    Oracle的临时表空间是数据库系统中的一个重要组成部分,主要用于存储临时数据和执行特定操作时的中间结果。临时表空间在查询优化、...同时,对临时表空间进行定期审计和调整,能够帮助优化数据库性能,提高资源利用率。

    db2表空间不足及处理

    这种情况下,DB2数据库会报-1585错误码,表明临时表空间不足。那么,如何解决这个问题呢? 首先,我们需要了解DB2表空间的概念。DB2表空间是指数据库中的一块逻辑存储单元,用于存储数据库中的数据。DB2表空间可以...

    oracle创建临时表空间文档及工具

    在这条语句中,`temp_tablespace`是你想要创建的临时表空间的名称,`tempfile_path.dbf`是你希望存放临时表空间数据文件的路径和文件名,`10M`是初始大小,`5M`是自动扩展增量,`50M`是最大尺寸。`EXTENT MANAGEMENT...

    db2表空间不足及处理.doc

    DB2表空间不足可能会导致数据库性能下降,甚至崩溃。因此, DB2表空间的检查和处理是数据库管理员的重要任务之一。 一、DB2表空间的概念 DB2表空间是数据库管理系统中用于存储数据的基本结构单元。它是由一个或多...

    达梦数据库的性能优化收集.pdf

    RECYCLE是 DM新引入的缓冲区,专门用于缓冲临时表空间。通过参数RECYCLE可以防止某些复杂查询的中间结果挤占大量的BUFFER空间,降低 BUFFER的命中率,从而增加额外的 IO 操作。 二、数据库性能瓶颈分析 达梦数据库...

    Delphi演示数据库的临时表应用例子..rar

    在IT行业中,Delphi是一款强大的RAD(快速应用程序开发)...总之,掌握在Delphi中使用数据库临时表的技术对于提高应用程序的性能和效率至关重要。通过实践和学习提供的示例代码,开发者可以更好地理解和应用这一技巧。

Global site tag (gtag.js) - Google Analytics