ITPub博客

首页 > 应用开发 > IT综合 > PGA和UGA的探究

PGA和UGA的探究

原创 IT综合 作者:litterbaby 时间:2007-04-01 20:18:32 0 删除 编辑
PGA和UGA的探究[@more@]

PGA和UGA的探究

PGA和UGA一直是我很迷惑的两个概念,今天就好好学习一下这两个概念。

在Oracle的官方定义中:PGA的定义是:

A program global area (PGA) is a memory region which contains data and control information for a server process.

意思就是说PGA就是服务器进程的内存区域。详细来说应该是对于每一个进程或者现成线程的私有内存区域,并不能被其他进程或者线程访问。是由调用c函数malloc()或者memmap()分配的一片内存区域,在生命周期中可以增长或者缩小。

UGA事实上是会话的状态,是会话能够获得的内存区域。UGA的位置通常和实如何连接Oracle数据库有关,如果连接数据库是使用的是共享服务器的模式的话,UGA是存在于SGA上,这样每个共享内存进程都能够连接。如果是专用服务器模式的话,UGA则是存放在PGA中。这样就可以理解PGA是大于或者等于UGA的。

除了UGA在PGA中还用于内存排序,bitmap merging,hashing。在Oracle9i之后,有两种方式管理PGA。

手工PGA内存管理

自动PGA内存管理

这种内存的管理方式,是由于使用的不同有很大的不同。在Oracle9i中,如果使用了共享模式的数据库连接,将只能使用手工管理PGA的方式,但是在Oracle10g以后就可以在共享模式的环境下,使用手工管理PGA的方式。PGA的管理方式是有数据库初始参数workarea_size_policy来控制。这个参数有两个选择:auto, manual。

手工管理PGA

手工管理PGA需要设置以下三个参数:

Sort_area_size

这个参数是用于排序的内存的数量。

Sort_area_retained_size

这个参数是在排序完成之后,用于保持排序数据的内存数量

Hash_area_size

这个参数十用于存储内存哈希表的内存数量。这个参数用于hash连接,用于两个比较大的表之间的连接。

这些参数控制着在Oracle进行排序&hash数据的时候的空间数量。当然如果需要排序的数据量相对大于所设置的内存数量的话,系统将在临时表空间中进行。

这个参数中Sort_area_retained_size将是存放在UGA(其实也是在PGA,但是也是UGA的部分),而Sort_area_size-Sort_area_retained_size则是在PGA上分配。

http://www.itpub.net/507159.html

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

上一篇: STATSPACK报告解读
请登录后发表评论 登录
全部评论
  • 博文量
    131
  • 访问量
    465730