ITPub博客

首页 > Linux操作系统 > Linux操作系统 > PGA & UGA

PGA & UGA

原创 Linux操作系统 作者:tolywang 时间:2009-08-12 11:00:54 0 删除 编辑

 

进程全局区和用户全局区

进程全局区(PGA)是特定于进程的一段内存。换句话说,这是一个操作系统进程或线程专用的内存,不允许系统中的其他进程或线程访问。PGA一般通过C语言的运行时调用malloc()memmap()来分配,而且可以在运行时动态扩大(甚至可以收缩)。PGA绝对不会在OracleSGA中分配,而总是由进程或线程在本地分配。

实际上,对你来说,用户全局区(UGA)就是你的会话的状态。你的会话总能访问这部分内存。UGA的位置完全取决于你如何连接Oracle。如果通过一个共享服务器连接,UGA肯定存储在每个共享服务器进程都能访问的一个内存结构中,也就是SGA中。如果是这样,你的会话可以使用任何共享服务器,因为任何一个共享服务器都能读写你的会话的数据。另一方面,如果使用一个专用服务器连接,则不再需要大家都能访问你的会话状态,UGA几乎成了PGA的同义词;实际上,UGA就包含在专用服务器的PGA中。查看系统统计信息时可以看到,采用专用服务器模式时,总是会报告UGAPGA中(PGA大于或等于所用的UGA内存;而且PGA内存的大小会包括UGA的大小)。

所以,PGA包含进程内存,还可能包含UGAPGA内存中的其他区通常用于完成内存中的排序、位图合并以及散列。可以肯定地说,除了UGA内存,这些区在PGA中的比重最大。

Oracle9i Release 1起,有两种办法来管理PGA中的这些非UGA内存:

q  手动PGA内存管理采用这种方法时,你要告诉Oracle:如果一个特定进程中需要排序或散列,允许使用多少内存来完成这些排序或散列。

q  自动PGA内存管理,这要求你告诉Oracle:在系统范围内可以使用多少内存。

分配和使用内存的方式因情况不同而有很大的差异,因此,我们将分别进行讨论。需要说明,在Oracle9i中,如果采用共享服务器连接,就只能使用手动PGA内存管理。这个限制到Oracle 10g Release 1(及以上版本)中就没有了。在Oracle 10g Release 1中,对于共享服务器连接,既可以使用手动PGA内存管理,也可以使用自动PGA内存管理。

PGA内存管理受数据库初始化参数WORKAREA_SIZE_POLICY的控制,而且可以在会话级修改。在Oracle9i Release 2及以上版本中,这个初始化参数默认为AUTO,表示自动PGA内存管理。而在Oracle9i Release 1中,这个参数的默认设置为MANUAL

http://book.csdn.net/bookfiles/82/100827094.shtml      

 

            PGA是进程专用的内存区。这是Oracle专用或共享服务器需要的一组独立于会话的变量。PGA是一个内存“堆”,其中还可以分配其他结构。UGA也是一个内存堆,其中定义不同会话特有的结构。如果使用专用服务器来连接OracleUGA会从PGA分配,如果使用共享服务器连接,UGA则从SGA分配。这说明,使用共享服务器时,必须适当地设置SGA中大池(large pool)的大小,以便有足够的空间来适应可能并发地连接数据库的每一个用户。所以,如果数据库支持共享服务器连接,与有类似配置但只使用专用服务器模式的数据库相比,前者的SGA通常比后者大得多 .

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-613606/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    13204832