[每日一题]11gOCP 1z0-052 :2013-09-16 shared server mode
[每日一题]11gOCP 1z0-052 :2013-09-16 shared server mode
正确答案:A
来自《Oracle 9i&10g编程艺术》中对UGA的解释:
用户全局区(User Global Area,UGA):这个内存区与特定的会话相关联。它可能在SGA中分配,也可能在PGA 中分配,这取决于是用共享服务器还是用专用服务器来连接数据库。如果使用共享服务器,UGA 就在SGA 中分配;如果使用专用服务器,UGA 就会在PGA(即进程内存区)中。
实际上,对你来说,用户全局区(UGA)就是你的会话的状态。你的会话总能访问这部分内存。UGA的位置完全取决于你如何连接Oracle。如果通过一个共享服务器连接,UGA 肯定存储在每个共享服务器进程都能访问的一个内存结构中,也就是SGA 中。如果是这样,你的会话可以使用任何共享服务器,因为任何一个共享服务器都能读写你的会话的数据。
另一方面,如果使用一个专用服务器连接,则不再需要大家都能访问你的会话状态,UGA 几乎成了PGA 的同义词;实际上,UGA 就包含在专用服务器的PGA 中。查看系统统计信息时可以看到,采用专用服务器模式时,总是会报告UGA 在PGA 中(PGA 大于或等于所用的UGA内存;而且PGA 内存的大小会包括UGA 的大小)。
所以,PGA 包含进程内存,还可能包含UGA。PGA 内存中的其他区通常用于完成内存中的排序、位图合并以及散列。可以肯定地说,除了UGA 内存,这些区在PGA 中的比重最大。
PGA 是进程专用的内存区。这是Oracle专用或共享服务器需要的一组独立于会话的变量。PGA 是一个内存“堆”,其中还可以分配其他结构。UGA也是一个内存堆,其中定义不同会话特有的结构。如果使用专用服务器来连接Oracle,UGA 会从PGA 分配,如果使用共享服务器连接,UGA 则从SGA 分配。
这说明,使用共享服务器时,必须适当地设置SGA 中大池(large pool)的大小,以便有足够的空间来适应可能并发地连接数据库的每一个用户。所以,如果数据库支持共享服务器连接,与有类似配置但只使用专用服务器模式的数据库相比,前者的SGA 通常比后者大得多。