Chinaunix首页 | 论坛 | 博客
  • 博客访问: 793331
  • 博文数量: 180
  • 博客积分: 4447
  • 博客等级: 上校
  • 技术积分: 1582
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-03 14:51
文章分类

全部博文(180)

文章存档

2014年(6)

2013年(8)

2011年(125)

2009年(35)

2008年(1)

2007年(5)

分类: Oracle

2011-05-04 11:39:59

SGA 中包含了多个内存组件(component),每一组件都可以被看作为一个内存池,用于满足特定类型的内存分配请求。举例来说,内存组件中包括共享池(shared pool)(为 SQL 及 PL/SQL 的执行分配内存),Java 池(java pool)(为 Java 对象及 Java 程序的执行分配内存),及数据缓存区(buffer cache)(用于缓存磁盘上的数据块)等。所有 SGA 组件都是以预设的粒度(granule)为单位进行内存的分配与回收的。Oracle 数据库通过记录每个 SGA 组件使用的粒度单位的数量来掌握整个 SGA 的内存使用情况。


粒度单位的大小是由整个 SGA 的容量决定的。在大多数平台下,当 SGA 的容量小于 1GB 时,一个粒度单位为 4MB;当 SGA 的容量大于 1GB 时,一个粒度单位则为 16MB。但也有些平台例外。例如,在 32 位的 Windows 平台下,当 SGA 的容量大于 1GB 时,一个粒度单位为 8MB。

用户可以设定 Oracle 数据库实例的 SGA 能够使用的内存总数量。Oracle 在启动一个实例之初只会为此实例分配最小所需内存,而在实例运行期间可以通过扩展各个 SGA 组件来为实例提供更多内存,SGA 所使用内存的上限由 SGA_MAX_SIZE 初始化参数决定。在实例初始化时,如果初始化参数文件(initialization parameter file)或服务器参数文件(server parameter file)中 SGA_MAX_SIZE 的值小于 Oracle 为 SGA 各组件分配的内存之和(为 SGA 各组件分配的内存数量是依据参数文件中的显式设定值或系统的默认值),Oracle 将忽略 SGA_MAX_SIZE 参数。


为了优化系统性能,整个 SGA 的容量应与实际内存数量相符。如果因 SGA 过大而需要使用虚拟内存(virtual memory)时,数据库的系统性能将显著下降。因为此时操作系统需要对 SGA 中的部分内容进行分页(page)(即在磁盘上进行读写操作)。SGA 中各个内存组件的容量会对数据库系统的性能有所影响。
阅读(2385) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~