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博客 ” ,链接:http://blog.itpub.net/222350/viewspace-908043/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/222350/viewspace-908043/