oracle 专家高级编程 中文第四章.pdf

oracle 专家高级编程 中文第四章.pdf

ID:52242183

大小:341.82 KB

页数:27页

时间:2020-03-25

oracle 专家高级编程 中文第四章.pdf_第1页
oracle 专家高级编程 中文第四章.pdf_第2页
oracle 专家高级编程 中文第四章.pdf_第3页
oracle 专家高级编程 中文第四章.pdf_第4页
oracle 专家高级编程 中文第四章.pdf_第5页
资源描述:

《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这部分

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。