突破oracle for win2K的2G内存限制
突破oracle for win2K的2G内存限制
========================================
众所周知,在32位的操作系统如win2K上,操作系统能管理的内存为4GB(power(2,32) =4G) ,使用的总内存有2G限制。目前大多数信息系统都能为数据库服务器配上4G物理内存甚至更多,但无论你为系统配置多大的物理内存,正常情况下都不能使使用超过2G的内存(包含SGA、PGA等),从而造成系统资源浪费。那么,有没有什么办法能使运行在系统上的 使用超过2G的内存呢? 提供了一种叫4GT(4G )的技术,使得使用超过2G(不超过3G)的内存成为可能。而为了让应用程序使用更大的内存,还有一种PSE36的技术,可以让 使用超过3G的内存。这里,只对我们使用4GT特性让使用超过2G的内存进行讨论。
一 使用4GT特性的基本要求:
….尽管可以在不超过2G物理内存的系统上使用4GT特性,但并不推荐这种做法,因为这将会严重降低系统性能。以我的经验来讲,如果系统未安装4G物理内存,最好也不要使用这种方法来让使用更多的内存。此外,在需要你的使用超过2G的内存时,数据库服务器最好不要再运行其他的服务,以减小系统的压力,让工作得更好。
….另外,据MS的文档突破oracle for win2K的2G内存限制,4GT只能用于 , 版本上, 版以及 版不能使用4GT特性(实际上是不是也没有必要?)
二 为什么4GT能让应用程序使用超过2G的内存
….在正常情况下,系统对内存的分配是这样的:在内存地址 到 之间的空间,交给应用程序使用,操作系统内核及其支持则使用内存地址 到 之间的空间。在使用4GT之后,操作系统将内核及其支持程序使用的内存地址空间压缩到 到 之间,从而为应用程序“让”出来1G的空间。但是,仅仅“让”出来了这1G的空间还是不够的,还需要指定哪一个应用程序来使用这“多出来的”1G空间,以及如何分配份额等。后面将结合具体的参数设置来讨论。为便于讨论,我们将正常情况下应用程序可以使用的2G内存(即地址在 到 之间的内存)称作普通内存,而将 “让”出来的1G内存(地址在 到 之间)称作间接内存。
三 使用超过2G内存,不超过3G内存的具体设置步骤:
1 首先应卸载实例,关闭服务。
2 打开操作系统3G开关:
….修改boot.ini文件,在启动项中添加 /3G 参数。修改过后的boot.ini文件应该类似以下内容:
boot
=8
=multi(0)disk(0)rdisk(0)(1)

multi(0)disk(0)rdisk(0)(1)=” 2000 ” /3G /
注意在启动win2K 的一栏里,多了一个 /3G 参数。这个参数的作用,就是让启动时,将自己的内核及支持程序装载到内存地址 到 之间,给应用程序留出3G的空间来。
3 修改 的 init.ora 文件
..1) 确定的缓冲区及共享池大小,假设作如下定义:
…….. = 4096
…….. = # 缓冲区大小为1G
…….. = # 使用300M共享池
..2) 添加下列各项内容:
…….. ffers = true
…….. # 告诉可以使用间接内存(即可以使用让出来的1G内存作为数据缓冲区)
…….. = true
…….. # 把 SGA锁定到内存中,不产生页面交换文件(8i的参数可能是 = true)
…….. # 对于一个有4G物理内存的系统来讲,可能这一个参数并不是必须的
4 修改注册表,定义的使用常规内存大小

….在注册表 中添加一个二进制值,名称为 ,值的单位为字节,大小为你需要让使用普通内存作为缓存的大小(不是让出来的1G,而是内存地址在 到 之间的内存大小)。假如设为,即200M大小,那么的数据缓冲区将占用200M的普通内存,其余部分(1G – 200M = 824M)则使用间接内存。
5 重新启动操作系统oracle 运行l内存限制,启动数据库。OKoracle 运行l内存限制,你现在的 可以使用2G + 824M内存了。
四 几个补充讨论
1 系统“让”出来的1G间接内存,只能用于数据缓冲区
….在4GT特性测试中发现,间接内存只能用于数据缓冲区,而不能用于共享池,也不能分配给用户作为PGA。或许有其他的参数可以定义,但我查到的文献中没有任何一篇讲间接内存可以用于哪些地方,而在我们的测试中发现按上面的修改后,间接内存只能用于数据缓冲区。此结论只作为一个经验突破oracle for win2K的2G内存限制,不是定论,请各位大侠补充修正。
2 注册表中 参数大小的定义
….这个参数定义缓冲池使用普通内存的大小,不能太小。在数据块大小为4K,缓冲池为1G(即使用个块作缓冲池)大小的情况下,此参数定义为100M时,不能启动,定义为200M时正常启动。根据我阅读文献后对这个情况的理解,数据缓冲区的每一个块的块头信息都将存放于普通内存中,不能存放于间接内存中。如果此参数定义过小,导致缓冲区块头信息都不能存放,则可导致数据库启动失败。那么,是不是同样大小的缓冲区,数据库块越大oracle 运行l内存限制,则这个参数就可以定义得越小,因而可以占用更少的普通内存呢?有待验证。
….在具体的应用中,如何定义此参数,应综合考虑最大并发连接数(专用服务器模式下)、用户重用的堆栈大小、排序区、共享池、大池等内存参数的设置情况,尽可能的将数据缓冲区放到间接内存中,充分利用系统的资源。
3 间接内存的性能
….据的文献讲,间接内存的性能(我想主要是指速度和效率吧?)不如直接内存,绝不推荐在未安装有4G物理内存的系统上使用4GT特性。我不知道如何比较间接内存与直接内存的速度和效率,因而未作测试,姑且信之。
….一点小结,期望能对大家有所启发。还请各位大侠补充指正。
以上内容的测试环境:
IBM X360 +4G内存 + RAID 5阵列
2000 SP3 + 8.1.6 专用服务器模式
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299
资源库 - 资源分享下载网 » 突破oracle for win2K的2G内存限制
常见问题FAQ
- 关于资源售价和售后服务的说明?
- 代码有没有售后服务和技术支持?
- 有没有搭建服务?
- 链接地址失效了怎么办?
- 关于解压密码

