欢迎来到天天文库
浏览记录
ID:52242183
大小:341.82 KB
页数:27页
时间:2020-03-25
《oracle 专家高级编程 中文第四章.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第4章内存结构这一章将讨论Oracle的3个主要的内存结构:q系统全局区(SystemGlobalArea,SGA):这是一个很大的共享内存段,几乎所有Oracle进程都要访问这个区中的某一点。q进程全局区(ProcessGlobalArea,PGA):这是一个进程或线程专用的内存,其他进程/线程不能访问。q用户全局区(UserGlobalArea,UGA):这个内存区与特定的会话相关联。它可能在SGA中分配,也可能在PGA中分配,这取决于是用共享服务器还是用专用服务器来连接数据库。如果使用共享服务器,UGA就在SGA中分配;如果使用专用服务器,UGA就会在PGA(即进程内存区)中。注意
2、在Oracle的较早版本中,共享服务器称为多线程服务器(Multi-ThreadedServer)或MTS。这本书中我们会一直用“共享服务器”的说法。下面首先讨论PGA和UGA,然后再来介绍SGA,SGA确实是一个很庞大的结构。4.1进程全局区和用户全局区进程全局区(PGA)是特定于进程的一段内存。换句话说,这是一个操作系统进程或线程专用的内存,不允许系统中的其他进程或线程访问。PGA一般通过C语言的运行时调用malloc()或memmap()来分配,而且可以在运行时动态扩大(甚至可以收缩)。PGA绝对不会在Oracle的SGA中分配,而总是由进程或线程在本地分配。实际上,对你来说,用户
3、全局区(UGA)就是你的会话的状态。你的会话总能访问这部分内存。UGA的位置完全取决于你如何连接Oracle。如果通过一个共享服务器连接,UGA肯定存储在每个共享服务器进程都能访问的一个内存结构中,也就是SGA中。如果是这样,你的会话可以使用任何共享服务器,因为任何一个共享服务器都能读写你的会话的数据。另一方面,如果使用一个专用服务器连接,则不再需要大家都能访问你的会话状态,UGA几乎成了PGA的同义词;实际上,UGA就包含在专用服务器的PGA中。查看系统统计信息时可以看到,采用专用服务器模式时,总是会报告UGA在PGA中(PGA大于或等于所用的UGA内存;而且PGA内存的大小会包括UG
4、A的大小)。所以,PGA包含进程内存,还可能包含UGA。PGA内存中的其他区通常用于完成内存中的排序、位图合并以及散列。可以肯定地说,除了UGA内存,这些区在PGA中的比重最大。从Oracle9iRelease1起,有两种办法来管理PGA中的这些非UGA内存:q手动PGA内存管理,采用这种方法时,你要告诉Oracle:如果一个特定进程中需要排序或散列,允许使用多少内存来完成这些排序或散列。q自动PGA内存管理,这要求你告诉Oracle:在系统范围内可以使用多少内存。分配和使用内存的方式因情况不同而有很大的差异,因此,我们将分别进行讨论。需要说明,在Oracle9i中,如果采用共享服务器连
5、接,就只能使用手动PGA内存管理。这个限制到Oracle10gRelease1(及以上版本)中就没有了。在Oracle10gRelease1中,对于共享服务器连接,既可以使用手动PGA内存管理,也可以使用自动PGA内存管理。PGA内存管理受数据库初始化参数WORKAREA_SIZE_POLICY的控制,而且可以在会话级修改。在Oracle9iRelease2及以上版本中,这个初始化参数默认为AUTO,表示自动PGA内存管理。而在Oracle9iRelease1中,这个参数的默认设置为MANUAL。下面几节将分别讨论这两种方法。4.1.1手动PGA内存管理如果采用手动PGA内存管理,有些参
6、数对PGA大小的影响最大,这是指PGA中除了会话为PL/SQL表和其他变量分配的内存以外的部分,这些参数如下:qSORT_AREA_SIZE:在信息换出到磁盘之前,用于对信息排序的RAM总量。1qSORT_AREA_RETAINED_SIZE:排序完成后用于保存已排序数据的内存总量。也就是说,如果SORT_AREA_SIZE是512KB,SORT_AREA_RETAINED_SIZE是256KB,那么服务器进程最初处理查询时会用512KB的内存对数据排序。等到排序完成时,排序区会“收缩”为256KB,这256KB内存中放不下的已排序数据会写出到临时表空间中。qHASH_AREA_SIZE
7、:服务器进程在内存中存储散列表所用的内存量。散列联结时会使用这些散列表结构,通常把一个大集合与另一个集合联结时就会用到这些结构。两个集合中较小的一个会散列到内存中,散列区中放不下的部分都会通过联结键存储在临时表空间中。Oracle将数据写至磁盘(或换出到磁盘)之前,数据排序或散列所用的空间量就由这些参数控制,这些参数还控制着排序完成后会保留多少内存段。SORT_AREA_SIZE~SORT_AREA_RETAINED_SIZE这部分
此文档下载收益归作者所有