突破oracle for win2K的2G内存限制

oracle

突破oracle for win2K的2G内存限制  
  众所周知,在32位的操作系统如win2K上,操作系统能管理的内存为4GB(power(2,32) =4G) ,oracle使用的总内存有2G限制。目前大多数信息系统都能为数据库服务器配上4G物理内存甚至更多,但无论你为系统配置多大的物理内存,正常情况下都不能使oracle使用超过2G的内存(包含SGA、PGA等),从而造成系统资源浪费。那么,有没有什么办法能使运行在windows系统上的oracle使用超过2G的内存呢?windows 提供了一种叫4GT(4G Tuning)的技术,使得oracle使用超过2G(不超过3G)的内存成为可能。而为了让应用程序使用更大的内存,还有一种PSE36的技术,可以让oracle使用超过3G的内存。这里,只对我们使用4GT特性让oracle使用超过2G的内存进行讨论。
一 使用4GT特性的基本要求:

....尽管可以在不超过2G物理内存的系统上使用4GT特性,但oracle并不推荐这种做法,因为这将会严重降低系统性能。以我的经验来讲,如果系统未安装4G物理内存,最好也不要使用这种方法来让oracle使用更多的内存。此外,在需要你的oracle使用超过2G的内存时,数据库服务器最好不要再运行其他的服务,以减小系统的压力,让oracle工作得更好。

....另外,据MS的文档,4GT只能用于 Advanced Server , Datacenter版本上,Server 版以及 Professional 版不能使用4GT特性(实际上是不是也没有必要?)

二 为什么4GT能让应用程序使用超过2G的内存

....在正常情况下,windows系统对内存的分配是这样的:在内存地址0x00000000 到 0x7FFFFFFF之间的空间,交给应用程序使用,操作系统内核及其支持则使用内存地址 0x80000000 到 0xFFFFFFFF之间的空间。在使用4GT之后,操作系统将内核及其支持程序使用的内存地址空间压缩到 0xC0000000 到 0xFFFFFFFF之间,从而为应用程序“让”出来1G的空间。但是,仅仅“让”出来了这1G的空间还是不够的,还需要指定哪一个应用程序来使用这“多出来的”1G空间,以及如何分配份额等。后面将结合具体的参数设置来讨论。为便于讨论,我们将正常情况下应用程序可以使用的2G内存(即地址在 0x00000000 到 0x7FFFFFFF 之间的内存)称作普通内存,而将windows “让”出来的1G内存(地址在 0x80000000 到 0xBFFFFFFF之间)称作间接内存。

三 oracle使用超过2G内存,不超过3G内存的具体设置步骤:

1 首先应卸载实例,关闭oracle服务。

2 打开操作系统3G开关:

....修改boot.ini文件,在启动windows项中添加 /3G 参数。修改过后的boot.ini文件应该类似以下内容:

[boot loader]

timeout=8

default=multi(0)disk(0)rdisk(0)partition(1)

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)="Microsoft Windows 2000 Advanced Server" /3G /fastdetect

注意在启动win2K AdvServer的一栏里,多了一个 /3G 参数。这个参数的作用,就是让windows启动时,将自己的内核及支持程序装载到内存地址 0xC0000000 到 0xFFFFFFFF 之间,给应用程序留出3G的空间来。

3 修改oralce 的 init.ora 文件

..1) 确定oracle的缓冲区及共享池大小,假设作如下定义:

........ db_block_size = 4096

........ db_block_buffers = 262144 # 缓冲区大小为1G

........ share_pool_size = 314572800 # 使用300M共享池

..2) 添加下列各项内容:

........ use_indirect_data_buffers = true

........ # 告诉oracle可以使用间接内存(即可以使用windows让出来的1G内存作为数据缓冲区)

........ pre_page_sga = true

........ # 把oracle SGA锁定到内存中,不产生页面交换文件(8i的参数可能是lock_sga = true)

........ # 对于一个有4G物理内存的系统来讲,可能这一个参数并不是必须的

4 修改注册表,定义oracle的DBbuffer使用常规内存大小

....在注册表 _Local_Machine中添加一个二进制值,名称为AWE_WINDOW_MEMORY ,值的单位为字节,大小为你需要让oracle使用普通内存作为缓存的大小(不是windows让出来的1G,而是内存地址在0x00000000 到 0x7FFFFFFF 之间的内存大小)。假如设为209715200,即200M大小,那么oracle的数据缓冲区将占用200M的普通内存,其余部分(1G - 200M = 824M)则使用间接内存。

5 重新启动操作系统,启动数据库。OK,你现在的 oracle 可以使用2G + 824M内存了。

四 几个补充讨论

1 windows系统“让”出来的1G间接内存,只能用于数据缓冲区

....在4GT特性测试中发现,间接内存只能用于数据缓冲区,而不能用于共享池,也不能分配给用户作为PGA。或许有其他的参数可以定义,但我查到的文献中没有任何一篇讲间接内存可以用于哪些地方,而在我们的测试中发现按上面的修改后,间接内存只能用于数据缓冲区。此结论只作为一个经验,不是定论,请各位大侠补充修正。

2 注册表中 AWE_WINDOW_MEMORY 参数大小的定义

....这个参数定义缓冲池使用普通内存的大小,不能太小。在数据块大小为4K,缓冲池为1G(即使用262144个块作缓冲池)大小的情况下,此参数定义为100M时,oracle不能启动,定义为200M时正常启动。根据我阅读文献后对这个情况的理解,数据缓冲区的每一个块的块头信息都将存放于普通内存中,不能存放于间接内存中。如果此参数定义过小,导致缓冲区块头信息都不能存放,则可导致数据库启动失败。那么,是不是同样大小的缓冲区,数据库块越大,则这个参数就可以定义得越小,因而可以占用更少的普通内存呢?有待验证。

....在具体的应用中,如何定义此参数,应综合考虑最大并发连接数(专用服务器模式下)、用户重用的堆栈大小、排序区、共享池、大池等内存参数的设置情况,尽可能的将数据缓冲区放到间接内存中,充分利用系统的资源。

3 间接内存的性能

....据oracle的文献讲,间接内存的性能(我想主要是指速度和效率吧?)不如直接内存,绝不推荐在未安装有4G物理内存的系统上使用4GT特性。我不知道如何比较间接内存与直接内存的速度和效率,因而未作测试,姑且信之。

....一点小结,期望能对大家有所启发。还请各位大侠补充指正。

以上内容的测试环境:

IBM X360 +4G内存 + RAID 5阵列

Windows 2000 Advaced Server SP3 + oracle 8.1.6 专用服务器模式
 

时间: 2025-01-19 02:48:36

突破oracle for win2K的2G内存限制的相关文章

没有2g内存?一招让Vista系统速度如飞

虚拟内存,就是Windows里面的分页文件(页面交换文件,默认保存在C盘根目录,系统隐藏文件),以硬盘 空间作为模拟内存,进行Windows的数据交换. 很多朋友都在用高配置的电脑,配备了2G内存,当然台式机比内存笔记本还能更大,我们的建议是:关闭掉 页面交换文件,让你的Vista飞起来! 具体步骤很简单: 1.桌面上计算机图标右键 - > 属性 ->高级系统设置 -> 第一个"设置"(性能选项那儿) ,当然,有的朋友桌面上不放图标,就在控制面板里面的系统属性里面设置

电脑原本2G内存,加了张2G的内存条,显示为安装内存4G(可用2G),怎么办啊,好像没起作用

问题描述 电脑原本2G内存,加了张2G的内存条,显示为安装内存4G(可用2G),怎么办啊,好像没起作用 我的电脑是三星SensR530,操作系统是Win7简易版,32位 解决方案 Win7**简易版**,32位,是否入门版的?似乎只支持2GB的...家庭基本版本以上的可以支持到最大4GB 解决方案二: 32位系统是可以识别4G内存的, 你看看是不是你的其他硬件把内存占了,比如显卡什么的(个人觉得很有可能) 或者再看看是不是加装的内存条型号不匹配,以至于不能使用(刚百度了一下,看到你这个型号的电脑

戴尔PowerEdge T100报价3200元免费升级2G内存

戴尔PowerEdge T100支持机架和塔式安装,是一款配置灵活的服务器.今日,笔者从经销商处了解到目前戴尔PowerEdge T100服务器报价为3200元,http://www.aliyun.com/zixun/aggregation/17943.html">免费升级到2G内存,免费送货上门,安装调试. 戴尔PowerEdge T100服务器 戴尔PowerEdge T100作为一款塔式机,处理器采用英特尔奔腾双核E2220,核心频率2.4GHz,集成1MB二级缓存,前端总线800M

戴尔PowerEdge T410免费升级成2G内存售12000元

编辑点评:这款戴尔PowerEdge T410诸多特性非常适合http://www.aliyun.com/zixun/aggregation/14182.html">成长型企业选用,如采用塔式结构,扩展能力强,满足未来升级需求.附带OpenManage管理系统,可选iDRAC 6远程管理模块,降低服务器后期维护管理难度. 戴尔PowerEdge T410采用双插槽塔式结构,支持双路至强5500系列处理器.作为2900的升级版第11代服务器塔式的结构有效保证扩展能力,对于成长型企业后期的部署

突破2G内存限制 SQL2005 AWE应用测试

在我们虚拟化系列文章的数据库测试中,我们看到了数据库的测试过程会用到大量的内存,这很容易达到32bit Windows的一处限制:进程内存被限制为2GB,而通常服务器里面4GB或更多的内存很是常见,这么多内存是怎么应用的呢?它们怎么在数据库应用方面发挥力量呢?我们下面的测试可以解答相关的一系列问题. SQL Server 2005是一个流行的关系数据库系统 程序只能使用2GB内存的这个限制是32位操作系统架构引起的.传统意义上的32bit操作系统使用32bit的内存地址,这样寻址范围就已经被限制

Oracle推JD Edwards EnterpriseOne内存应用

[天极网服务器频道5月18日消息]快速和敏捷体现了当今全球经济的时代体征.虽然传统处理系统可生成海量的有用数据,但却需要分批次.手动或单独系统处理方式,为企业决策提供实时分析和数据可视化.处理能力的显着提高可加速提升关键业务应用性能,但到目前为止,仍没有一种应用能以近乎实时的方式实现复杂的数据分析,以帮助客户作出正确决定并解决关键业务问题.运行于Oracle集成系统上的 Oracle JD Edwards EnterpriseOne内存应用,可帮助企业利用下一代具有新功能的内存计算实现卓越绩效,

甲骨文宣布推出面向Oracle JD Edwards EnterpriseOne的内存应用

北京,2013年5月17日--快速和敏捷体现了当今全球经济的时代体征.虽然传统处理系统可生成海量的有用数据,但却需要分批次.手动或单独系统处理方式,为企业决策提供实时分析和数据可视化.处理能力的显着提高可加速提升关键业务应用性能,但到目前为止,仍没有一种应用能以近乎实时的方式实现复杂的数据分析,以帮助客户作出正确决定并解决关键业务问题.运行于Oracle集成系统上的 Oracle JD Edwards EnterpriseOne内存应用,可帮助企业利用下一代具有新功能的内存计算实现卓越绩效,以转

从excel导入1000多条数据到oracle数据库时,java内存溢出,tomcat报错

问题描述 tomcat错误日志如下:## An unexpected error has been detected by HotSpot Virtual Machine:## EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7c930a19, pid=1168, tid=1936## Java VM: Java HotSpot(TM) Client VM (1.5.0_16-b02 mixed mode)# Problematic frame:#

mysql 数据库中my.ini的优化 2G内存针对站多 抗压型的设置_Mysql

物理内存越大,设置就越大.默认为2402,调到512-1024最佳 innodb_additional_mem_pool_size=4M 默认为2M innodb_flush_log_at_trx_commit=1 (设置为0就是等到innodb_log_buffer_size列队满后再统一储存,默认为1) innodb_log_buffer_size=2M 默认为1M innodb_thread_concurrency=8 你的服务器CPU有几个就设置为几,建议用默认一般为8 key_buff