oracle数据库:内存结构_笔记2
4.1 进程全局区和用户全局区
PGA(进程全局区)是特定于进程的一段内存。换句话说,这是一个操作系统进程或线程专用的内存,不允许系统中的其他进程或线程访问。PGA一般通过C语言的运行时调用malloc()或memmap()来分配,而且可以在运行时动态扩大(甚至可以收缩)。PGA绝对不会在Oracle的SGA中分配,而总是由进程或线程在本地分配。PGA中的P代表Process或Program,是不共享的。
UGA(用户全局区)就是你的会话的状态。会话总能访问这部分内存。UGA的位置完全取决于你如何连接Oracle。如果通过一个共享服务器连接,UGA肯定存储在每个共享服务器进程都能访问的一个内存结构中,也就是SGA中。如果是这样,你的会话可以使用任何共享服务器,因为任何一个共享服务器都能读写你的会话的数据。另一方面,如何使用一个专用服务器连接,则不再需要大家都能访问你的会话状态,UGA几乎成了PGA的同义词。
实际上,UGA就包含在专用服务器的PGA中。查看系统统计信息时可以看到,采用专用服务器模式时,总是会报告UGA在PGA中(PGA大于或等于所用的UGA内存,而且PGA内存的大小会包括UGA的大小)。
所以,PGA包含进程内存,还可能包含UGA。PGA内存中的其他区通常用于完成内存中的排序、位图合并以及散列。可以肯定地说,除了UGA内存,这些区在PGA中的比重最大。
从Oracle Database 9i Release 1起,有两种办法来管理PGA中的这些非UGA内存。
.手动PGA内存管理,采用这种方法时,你要告诉Oracle:如果一个特定进程中需要排序或散列,允许使用多少内存来完成这些排序或散列。
.自动PGA内存管理,这要求你告诉Oracle:在系统范围内可以使用多少内存。
从Oracle Database 11g Release 1开始,自动PGA内存管理可以使用以下两种技术实现。
.通过设置PGA_AGGREGATE_TARGET初始化参数,告诉Oracle可以使用多少PGA内存
.通过设置MEMORY_TARGET初始化参数,告诉Oracle数据库实例应当为SGA和PGA总共使用多大内存。数据库自己将根据这个参数确定合适的PGA大小。
注意:需要说明,在从Oracle Database 9i中,如果采用共享服务器连接,就只能使用手动PGA内存管理。这个限制到从Oracle Database 10g Release 1(及以上版本)中就没有了。在从Oracle Database 10g Release 1 中,对于共享服务器连接,既可以使用手动PGA内存管理,也可以使用自动PGA内存管理。
PGA内存管理受数据库初始化参数WORKAREA_SIZE_POLICY的控制,而且可以在会话级修改。在Oracle Database 9i Release 2及以上版本中,这个初始化参数默认为AUTO,表示自动PGA内存管理。而在Oracle Database 9i Release 1中,这个参数的默认设置为MANUAL。
http://www.52ij.com/jishu/5162.htmloracle数据库:内存结构_笔记1
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5163.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
