【SGA、PGA、UGA】overview of primary components (Oracle)(转载)

a---     系统全局区(System Global Area,SGA):这是一个很大的共享内存段,几乎所有Oracle进程都要访问这个区中的某一点。
b---   进程全局区(process global area,PGA) 这是一个进程或线程专用的内存,其它进程/线程不能访问
c---      用户全局区(User global area,UGA)这个内存区与特定的会话相关联,它可能在SGA中分配,也可能在PGA中分配,这取决于是用共享服务器还是用专用服务器来连接数据库。如果使用共享服务器,UGA就在SGA中分配;如果使用专用服务器UGA就会在PGA(即进程内存区)中。
注:在ORACLE的较早版本中,共享服务器稳为多线程服务器(Multi_Threader server)或MTS。
进程全局区和用户全局区
   进程全局区(PGA)是特定是进程的一段内存。换句话说,这是一个操作系统或线程专用的内存,不允许系统中的其它进程或线程访问。PGA一般通过C语言的运行时调用MALLOC()或MEMMAP()来分配,而且可以在运行时动态扩大(甚至可以收缩))。PGA绝对不会在ORACLE的SGA中分配,而总是由进程或线程在本地分配。
   实际上,用户全局区(UGA)说法是你的会话的状态。你的会话总能访问这部分内存。UGA的位置完全取决于你如何连接ORACLE。如果通过一个共享服务器连接,UGA肯定存储在每个人共享服务器进程都能访问的一个内存结构中,也就是SGA中。如果是这样,你的会话可以使用任务共享服务器,因为任何一个共享服务器都能读写你的会话的数据。另一方面,如果使用一个专用服务器连接,则不再需要大家都能访问你的会话状态,UGA几乎成了PGA的同议词,实际上,UGA就包含在专用服务器的PGA中,查看系统统计信息时可以看到,采用专用服务器模式时,总是会报告UGA在PGA中(PGA大于或等于所用的UGA内存;而且PGA内存的大小会包括UGA的大小)
  所以,PGA包含进程内存,还可能包含UGA。PGA内存中的其它区通常用于完成内存中的排序、位图合并以及散列。可以肯定地说,除了UGA内存,这些区在PGA中的比重最大。
    从ORACLE9I Release 1 起,有两种方法来管理PGA中的这些非UGA内存
   手动PGA内存管理,采用这种方法时,你要告诉ORACLE;如果一个特定进程中需要排序或散列,允许使用多少内存来完成这些排序或散列。
   自动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。

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

转载于:http://blog.itpub.net/20335819/viewspace-694943/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值