`

PGA与SGA的区别,PGA的功能介绍

 
阅读更多

当用户进程连接到数据库并创建一个对应的会话时,Oracle服务进程会为这个用户专门设置一个PGA区,用来存储这个用户会话的相关内容。当这个用户会话终止时,数据库系统会自动释放这个PAG区所占用的内存。这个PGA区对于数据库的性能有比较大的影响,特别是对于排序操作的性能。所以,在必要的时候合理管理PGA区,能够在很大程度上提高数据库的性能。

 

  一、PGA与SGA的区别。

 

  PGA(程序缓存区)与SGA(系统全局区)类似,都是Oracle数据库系统为会话在服务器内存中分配的区域。不过两者的作用不同,共享程度也不同。SGA系统全局区顾名思义,是对系统内的所有进程都是共享的。当多个用户同时连接到一个例程时,所有的用户进程、服务进程都可以共享使用这个SGA区。为此这个SGA的主要用途就是为不同用户之间的进程与服务进程提供一个交流的平台。除了这个作用,另外有一个重要的作用就是各种数据库的操作主要就是在这个SGA区内完成。

 

  而PGA程序缓冲区则主要是为了某个用户进程所服务的。这个内存区不是共享的,只有这个用户的服务进程本身才能够访问它自己的PGA区。做个形象的比喻,SGA就好像是操作系统上的一个共享文件夹,不同用户可以以此为平台进行数据方面的交流。而PGA就好像是操作系统上的一个私有文件夹,只有这个文件夹的所有者才能够进行访问,其他用户都不能够访问。虽然程序缓存区不像其他用户的进程开放,但是这个内存区仍然肩负着一些重要的使命,如数据排序、权限控制等等都离不开这个内存区。

 

  二、 为排序设置合理的排序区大小(SORT AREA)。

 

  当用户需要对某些数据进行排序时,数据库是如何处理的呢?首先,数据库系统会将需要排序的数据保存到PGA程序缓存区中的一个排序区内。然后再在这个排序区内对这些数据进行排序。如需要排序的数据有2M,那么排序区内必须至少要有2M的空间来容纳这些数据。然后排序过程中又需要有2M的空间来保存排序后的数据。由于系统从内存中读取数据比从硬盘中读取数据的速度要快几千倍,为此如果这个数据排序与读取的操作都能够在内存中完成,无疑可以在很大程度上提高数据库排序与访问的性能。如果这个排序的操作都能够在内存中完成,显然这是很理想的。但是如果PGA区中的排序区容量不够,不能够容纳排序后的数据,那会如何呢?此时,系统会从硬盘中获取一个空间,用来保存这需要排序的数据。此时排序的效率就会降低许多。为此在数据库管理中,如果发现用户的很多操作都需要用到排序,那么用户会设置比较大的排序区,可以提高用户访问数据的效率。

 

  在Oracle数据库中,这个排序区主要用来存放排序操作产生的临时数据。一般来说,这个排序区的大小占据这PGA程序缓存取的大部分空间,这是影响PGA区大小的主要因素。在小型应用中,数据库管理员可以直接采用其默认的值。但是在一些大型的应用中,或者需要进行大量记录排序操作的数据库系统中,管理员可能需要手工调整这个排序区的大小,以提高排序的性能。如果系统管理员需要调整这个排序区大小的话,需要通过初始化参数SORT_AREA_SIZE来实现。为了提高数据访问与排序的性能,数据库系统利用内存比硬盘要快几千倍的实施,会将准备排序的数据临时存放到这个排序区,并在排序区内完成数据的排序。管理员需要牢记这个原则,并在适当的情况下调整排序区的大小,以提高数据访问与数据排序的性能。

 

  三、 会话区保存着用户的权限等重要信息(USER SESSON DATA)。

 

  在程序缓存区内还包含着一个会话区。虽然绝大部分情况下,管理员不要维护这个会话区,可以让数据库系统进行维护。但是,管理员还是需要了解一下这个会话区的作用。因为这个会话区直接关系着数据库系统中数据的安全性。数据库系统不仅是存放数据的一个很好的载体,而且在还提供了一个统一管理数据的平台,可以根据实际需要,为不同的用户设置不同的访问权限。简单的说,在数据库中可以控制用户可以访问哪些数据。从而提高数据的安全性。

 

  当用户进程与数据库建立会话时,系统会将这个用户的相关权限查询出来,然后保存在这个会话区内。如此的话,用户进程在访问数据时,系统就会核对会话区内的用户权限信息,看看其是否具有相关的访问权限。由于系统将这个用户的权限信息存放在内存上,所以其核对用户权限的速度非常的快。因为系统不用再去硬盘中读取数据,直接从内存中读取。而从内存读取数据的效率要比硬盘上快几千倍。

 

  通常情况下,这个会话区内保存了会话所具有的权限、角色、性能统计等信息。这个会话区一般都是由数据库进行自我维护的,系统管理员不用干预。

 

四、 堆栈区保存变量信息(STACK SPACE)。

 

  有时候为了提高SQL语句的重用性,会在语句中使用绑定变量。简单的说,就是SQL语句可以接受用户传入的变量。从而用户只需要输入不同的变量值,就可以满足不同的查询需求。如现在用户需要查询所有员工的信息。然后其又要查询所有工龄在3年以上的员工等等。此时其实他们采用的是同一个SQL语句,只是传递给系统的变量不同而已。这可以在很大程度上降低数据库开发的工作量。这个变量在Oracle数据库系统中就叫做绑定变量。利用绑定变量可以加强与用户的互动性。另外在这个堆栈区内还保存着会话变量、SQL语句运行时的内存结构等重要的信息。

 

  通常情况下,这个堆栈区跟上面讲到的会话区一样,都可以让数据库系统进行自我维护,而管理员不用参与到其中。这些分区的大小,也是系统根据实际情况来进行自动分配的。当这个用户会话结束时,系统会自动释放这些区所占用的空间。

 

  五、 游标区 (CURSOR STATE)。

 

  无论是SQLServer数据库还是Oracle数据库中,有时候都需要用到游标技术。当运行使用游标的语句时,Oracle数据库系统会在程序缓存区中间为其分配一块区域。这块区域就叫做游标区。通常情况下,游标用来完成一些比较特殊的功能。而且一般来说,采用游标的语句要比其他语句的执行效率低一点。为此管理员在使用游标的时候,还是需要慎重。

 

  游标区是一个动态的区域。当用户执行游标语句时,系统就会在这个游标区内创建一个区域。当关闭游标时,这个区域就会被释放。这创建与释放,需要占用一定的系统资源,花费一定的时间。为此在使用游标时,如果频繁的打开和关闭游标,就会降低语句的执行性能。所以笔者建议,在写语句时,如果真的有必要使用游标技术时,则要注意游标不要频繁的打开和关闭。

 

  另外在Oracle数据库中,还可以通过限制游标的数量来提高数据库的性能。如在数据库系统中有一个初始化参数OPEN_CURSORS。管理员可以根据实际的需要,来设置这个参数,控制用户能够同时打开游标的数目。不过需要注意的是,在确实需要才有游标的情况下,如果硬件资源能够支持的话,那么就需要放宽这个限制。这可以避免用户进程频繁的打开和关闭游标。因为频繁的打开和关闭游标这对游标的操作是不利的,会影响数据库的性能。

 

  从以上的分析中可以看出,程序全局区(PGA)主要包含排序区、会话区、堆栈区和游标区四个部分的内容,他们各司其职,完成用户进程与数据库之间的会话。通常情况下,系统管理员主要关注的是排序区,在必要时需要手工调整这个排序区的大小。另外需要主要的是,游标区是一个动态的区域,在游标打开时创建,关闭时释放。故在数据库开发时,不要频繁的打开和关闭游标可以提高游标操作的效率,改善数据库的性能。其他分区的内容管理员只需要了解其用途,日常的维护交给数据库系统来完成即可。

分享到:
评论

相关推荐

    PGA,SGA与内存

    在Oracle数据库管理中,了解和...总之,合理配置和监控PGA与SGA的大小对于保证Oracle数据库的高性能运行至关重要。通过对这些关键参数的精细调优,可以显著提升数据库的响应速度和稳定性,从而满足企业级应用的需求。

    oracle中的SGA和PGA

    与SGA不同,PGA不是共享的,其大小通常根据会话的需求动态调整。虽然PGA不直接影响整个数据库的性能,但过大或过小的PGA分配都可能导致性能问题。 在Oracle数据库的日常管理和优化中,了解SGA和PGA的作用至关重要。...

    ORACLE 内存调整(SGA和PGA)

    SGA+PGA最好不要超过总内存的70%,内存详细调整方案,供学习。

    修改oracle初始化参数,包括Process,Session,SGA,PGA

    本文将详细介绍如何修改与监控`Process`, `Session`, `SGA`, 和 `PGA` 相关的初始化参数,并提供具体的SQL命令。 #### 1. Process和Session参数 ##### 查看Process和Session参数 首先,我们需要查看当前系统中`...

    oracle SGA PGA UGA 内存

    - 对于并发连接,特别是MTS(多线程服务器)模式,会影响PGA的大小,而PGA大小与UGA密切相关。 - 经验公式:OS使用内存 + SGA + 并发进程数 * (sort_area_size + hash_area_size + 其他) * 总内存。 3. **Program...

    oracle实例的内存(SGA和PGA)进行调整,优化数据库性

    ### Oracle实例内存优化详解:SGA与PGA的调整策略 #### 概述 在Oracle数据库管理系统中,优化数据库性能往往涉及到对其内部结构的理解与微调,尤其是针对内存资源的合理分配。本文将深入探讨Oracle实例的内存管理...

    OracleSGA和PGA管理.doc

    OracleSGA和PGA管理

    根据系统类型、DB版本和OS内存自动计算Oralce建议的memory_target、SGA和PGA大小

    根据系统类型、DB版本和OS内存自动计算Oralce建议的memory_target、SGA和PGA大小

    Oracle PGA详解

    #### PGA与SGA的区别 - **SGA**(System Global Area)是所有数据库进程共享的全局内存区域,包括数据缓冲区、日志缓冲区等,用于存储数据库的数据和控制信息。 - **PGA**则为每个服务器进程分配,包含排序区域、...

    更改ORACLE SGA的详细步骤

    下面将详细介绍如何更改 Oracle SGA 的大小,以及在出现问题时如何恢复到初始设置。 1. **查询 SGA 参数**: 在命令行中,使用 `sqlplus` 登录到数据库,以 `sysdba` 角色连接: ``` sqlplus /nolog Conn / as ...

    Oracle SGA

    这一特性允许数据库根据实际的处理需求动态地调整内存区域的大小,如sort_area_size、pga_aggregate_target、large_pool_size、sga_max_size和db_cache_size。这些内存区域分别服务于排序操作、PL/SQL程序执行、大...

    oracle sga 调整

    #### 一、SGA与PGA基本概念 - **SGA (System Global Area)**:系统全局区是Oracle实例启动时分配的共享内存区域,用于存储数据和控制信息。它包括多个部分,如共享池、数据缓冲区、日志缓冲区等。 - **共享池**:...

    ORACLE常规SGA,PGA设置.txt

    oracle11g10g安装备份基础维护

    Oracle9i 动态SGA,PGA特性探索

    Oracle9i数据库系统引入了动态SGA(System Global Area)和PGA(Program Global Area)的特性,这使得数据库实例能够更有效地管理和优化内存资源。在Oracle9i之前,SGA和PGA的配置往往需要手动调整,以适应不同工作...

    oralce SGA的自动管理、监控实现.docx

    在Oracle 11g版本中,引入了自动内存管理功能,显著简化了SGA的配置和管理。这个特性允许数据库管理员更专注于业务需求,而不是微调每个内存组件的大小。 1. **动态内存管理**:Oracle 11g的动态内存管理是通过两个...

    Oracle8i数据库的SGA管理.pdf

    4. **PGA(Program Global Area)**:虽然不是SGA的一部分,但与SGA紧密相关。PGA是每个服务器进程的私有内存区域,包含执行SQL语句所需的内存,如私有SQL区和工作区。 5. **数据库高速缓冲区缓存(Buffer Cache ...

    ORACLE葵花宝典

    #### 一、PGA与SGA的区别 在深入探讨ORACLE的PGA(Program Global Area)和SGA(System Global Area)之前,我们首先需要理解这两者的基本概念以及它们各自在Oracle数据库系统中的作用。 **PGA(程序全局区)**: - *...

Global site tag (gtag.js) - Google Analytics