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)主要包含排序区、会话区、堆栈区和游标区四个部分的内容,他们各司其职,完成用户进程

与数据库之间的会话。通常情况下,系统管理员主要关注的是排序区,在必要时需要手工调整这个排序区的大小。另外需要主要的是,游标区

是一个动态的区域,在游标打开时创建,关闭时释放。故在数据库开发时,不要频繁的打开和关闭游标可以提高游标操作的效率,改善数据库

的性能。其他分区的内容管理员只需要了解其用途,日常的维护交给数据库系统来完成即可。

原文地址:https://www.cnblogs.com/li-h/p/11776069.html

时间: 2024-08-10 19:15:54

PGA与SGA的区别,PGA的功能介绍的相关文章

PGA与SGA

当用户进程连接到数据库并创建一个对应的会话时,Oracle服务进程会为这个用户专门设置一个PGA区,用来存储这个用户会话的相关内容.当这个用户会话终止时,数据库系统会自动释放这个PAG区所占用的内存.这个PGA区对于数据库的性能有比较大的影响,特别是对于排序操作的性能.所以,在必要的时候合理管理PGA区,能够在很大程度上提高数据库的性能. 一.PGA与SGA的区别. PGA(程序缓存区)与SGA(系统全局区)类似,都是Oracle数据库系统为会话在服务器内存中分配的区域.不过两者的作用不同,共享

oracle中增加pga和sga

修改oracle数据库SGA和PGA大小 SGA的大小:一般物理内存20%用作操作系统保留,其他80%用于数据库.SGA普通数据库可以分配40%-60%之间,PGA可以分配20%-40%之间. 1.以system的身份登录并查看SGA信息:SQL>show parameter sga:查看PGA信息:SQL>show parameter pga: 2.修改sga_targetSQL>alter system set sga_target=436M; 3.修改sga_max_sizeSQL

Joomla软件功能介绍与开源程序大比拼Joomla,wordpress,Drupal哪个好?

Joomla 软件功能介绍:    Joomla!是一套在国外相当知名的内容管理系统 (Content Management System, CMS),它属于Portal(企业入口网站)类型,顾名思义,就是比较适合作为商业类型的网站程序.一般人对这类型的内容管理系统可能会有以下的别名来称呼: ■ 架站程序(或软件) ■ 快速架站程序(或软件) ■ 整站程序 Joomla!是使用PHP语言加上MySQL数据库所开发的软件系统,可以在Linux. Windows.MacOSX等各种不同的平台上执行.

Windows Azure初体验--功能介绍

Windows azure功能介绍 随之云计算时代的到来,让很多人都感觉在云里雾里.云到底是什么概念呢?我相信没有人能给一个合理的解释,反正我到目前理解是,公有云是托管在数据中心的服务器,前提是数据中心提供所有的软硬件服务,但是这样的解释也不完全对,也不完全错. Windows Azure分为中国版本和国际版本,两个在功能上有很大的区别.国际版的Azure功能相对比较丰富.在中国部署的windows azure 服务机房主要分布在北京.上海.在windows azure上通过地缘组来区分.那什么

Linux系统目录结构说明及功能介绍

Hello,大家晚上好!今天将给大家分享Linux系统中目录结构及各个目录的功能:本次的内容大纲如下: 1.Windows文件系统和Linux文件系统区别 2.Linux系统中目录结构说明及各个目录功能介绍 3.根文件系统子目录功能简单介绍 4.内容总结 一.Windows文件夹结构和Linux文件夹结构区别 先给大家上两张图片,如下:  图一.Windows系统截图 图二.Linux系统截图 第一副图片是在我们经常使用的Windows系统下截取而来:我们已经非常习惯C盘.D盘--的观念,对于第

Vmware Vcenter Converter 详细安装配置及功能介绍

Vmware vCenter Converter Standalone是一种用于将虚拟机和物理机转换为VMware虚拟机的可扩展解决方案(vmware vsphere converter可以自动化和简化物理机到虚拟机及虚拟机格式之间的转化过程,就是一个P2V.v2p的迁移克隆过程).它支持将windows和linux操作系统用作源,可以执行若干转换任务:总结为:vmware vcenter converter可以将正在运行的远程物理机和虚拟机作为虚拟机导入到vCenter Server管理的独立

dotConnect for MySQL控件下载及功能介绍

dotConnect for MySQL完全基于ADO.NET方法,因此您完全可以采用标准ADO.NET数据提供的方法来使用它.是一款为Microsoft .NET Framework提供直接MySQL数据库连接的数据发生器控件. 数据发生器,dotConnect for MySQL为Microsoft .NET Framework和.NET 组件Framework提供了直接MySQL数据库连接.它为NET Framework (ADO.NET)方法提供了完全的基于ActiveX的数据对象.AD

redis3.0 cluster功能介绍

edis从3.0开始支持集群功能.redis集群采用无中心节点方式实现,无需proxy代理,客户端直接与redis集群的每个节点连接,根据同样的hash算法计算出key对应的slot,然后直接在slot对应的redis上执行命令.在redis看来,响应时间是最苛刻的条件,增加一层带来的开销是redis不原因接受的.因此,redis实现了客户端对节点的直接访问,为了去中心化,节点之间通过gossip协议交换互相的状态,以及探测新加入的节点信息.redis集群支持动态加入节点,动态迁移slot,以及

HashSet HashTable HashMap的区别 及其Java集合介绍

(1)HashSet是set的一个实现类,hashMap是Map的一个实现类,同时hashMap是hashTable的替代品(为什么后面会讲到). (2)HashSet以对象作为元素,而HashMap以(key-value)的一组对象作为元素,且HashSet拒绝接受重复的对象.HashMap可以看作三个视图:key的Set,value的Collection,Entry的Set. 这里HashSet就是其实就是HashMap的一个视图. HashSet内部就是使用Hashmap实现的,和Hash