突破Oracle for win2k的2G内存限制
....众所周知,在32位的操作系统如win2K上,操作系统能管理的内存为4GB(power(2,32) =
一 使用4GT特性的基本要求:
....尽管可以在不超过
....另外,据MS的文档,4GT只能用于 Advanced Server , Datacenter版本上,Server 版以及 Professional 版不能使用4GT特性(实际上是不是也没有必要?
二 为什么4GT能让应用程序使用超过
....在正常情况下,windows系统对内存的分配是这样的:在内存地址0x00000000 到 0x7FFFFFFF之间的空间,交给应用程序使用,操作系统内核及其支持则使用内存地址 0x80000000 到 0xFFFFFFFF之间的空间。在使用4GT之后,操作系统将内核及其支持程序使用的内存地址空间压缩到 0xC0000000 到 0xFFFFFFFF之间,从而为应用程序“让”出来
三 oracle使用超过
1 首先应卸载实例,关闭oracle服务。
2 打开操作系统
....修改boot.ini文件,在启动windows项中添加 /
[boot loader]
timeout=8
default=multi(0)disk(0)rdisk(0)partition(1)/WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)/WINNT="Microsoft Windows 2000 Advanced Server" /
注意在启动win2K AdvServer的一栏里,多了一个 /
3 修改oralce 的 init.ora 文件
..1) 确定oracle的缓冲区及共享池大小,假设作如下定义:
........ db_block_size = 4096
........ db_block_buffers = 262144 # 缓冲区大小为
........ share_pool_size = 314572800 # 使用
..2) 添加下列各项内容:
........ use_indirect_data_buffers = true
........ # 告诉oracle可以使用间接内存(即可以使用windows让出来的
........ pre_page_sga = true
........ # 把oracle SGA锁定到内存中,不产生页面交换文件(8i的参数可能是lock_sga = true)
........ # 对于一个有
4 修改注册表,定义oracle的DBbuffer使用常规内存大小
....在注册表 /Hkey_Local_Machine/software/oracle/home0 中添加一个二进制值,名称为AWE_WINDOW_MEMORY ,值的单位为字节,大小为你需要让oracle使用普通内存作为缓存的大小(不是windows让出来的
5 重新启动操作系统,启动数据库。OK,你现在的 oracle 可以使用
四 几个补充讨论
1 windows系统“让”出来的
....在4GT特性测试中发现,间接内存只能用于数据缓冲区,而不能用于共享池,也不能分配给用户作为PGA。或许有其他的参数可以定义,但我查到的文献中没有任何一篇讲间接内存可以用于哪些地方,而在我们的测试中发现按上面的修改后,间接内存只能用于数据缓冲区。此结论只作为一个经验,不是定论,请各位大侠补充修正。
2 注册表中 AWE_WINDOW_MEMORY 参数大小的定义
....这个参数定义缓冲池使用普通内存的大小,不能太小。在数据块大小为4K,缓冲池为
....在具体的应用中,如何定义此参数,应综合考虑最大并发连接数(专用服务器模式下)、用户重用的堆栈大小、排序区、共享池、大池等内存参数的设置情况,尽可能的将数据缓冲区放到间接内存中,充分利用系统的资源。
3 间接内存的性能
....据oracle的文献讲,间接内存的性能(我想主要是指速度和效率吧?)不如直接内存,绝不推荐在未安装有
....一点小结,期望能对大家有所启发。还请各位大侠补充指正。
以上内容的测试环境:
IBM X360 +
Windows 2000 Advaced Server SP3 + oracle