前事不忘,后事之师,不忘国耻!

 立即注册  找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3462|回复: 0

[转帖]突破oracleforwin2k的2g内存限制

[复制链接]

[转帖]突破oracleforwin2k的2g内存限制

[复制链接]
ehxz

主题

0

回帖

3万

积分

管理员

积分
37090
2005-7-18 16:34:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
<>  众所周知,在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的内存进行讨论。 </P>
<>  一 使用4gt特性的基本要求: ....尽管可以在不超过2g物理内存的系统上使用4gt特性,但oracle并不推荐这种做法,因为这将会严重降低系统性能。以我的经验来讲,如果系统未安装4g物理内存,最好也不要使用这种方法来让oracle使用更多的内存。此外,在需要你的oracle使用超过2g的内存时,数据库服务器最好不要再运行其他的服务,以减小系统的压力,让oracle工作得更好。 </P>
<>  ....另外,据ms的文档,4gt只能用于 advanced server , datacenter版本上,server 版以及 professional 版不能使用4gt特性(实际上是不是也没有必要?) </P>
<>  二 为什么4gt能让应用程序使用超过2g的内存 ....在正常情况下,windows系统对内存的分配是这样的:在内存地址0x00000000 到 0x7fffffff之间的空间,交给应用程序使用,操作系统内核及其支持则使用内存地址 0x80000000 到 0xffffffff之间的空间。在使用4gt之后,操作系统将内核及其支持程序使用的内存地址空间压缩到 0xc0000000 到 0xffffffff之间,从而为应用程序“让”出来1g的空间。但是,仅仅“让”出来了这1g的空间还是不够的,还需要指定哪一个应用程序来使用这“多出来的”1g空间,以及如何分配份额等。后面将结合具体的参数设置来讨论。为便于讨论,我们将正常情况下应用程序可以使用的2g内存(即地址在 0x00000000 到 0x7fffffff 之间的内存)称作普通内存,而将windows “让”出来的1g内存(地址在 0x80000000 到 0xbfffffff之间)称作间接内存。 </P>
<>  三 oracle使用超过2g内存,不超过3g内存的具体设置步骤: </P>
<>  1 首先应卸载实例,关闭oracle服务。 </P>
<>  2 打开操作系统3g开关: </P>
<>  ....修改boot.ini文件,在启动windows项中添加 /3g 参数。修改过后的boot.ini文件应该类似以下内容: </P>
<>  [boot loader] <BR>  timeout=8 <BR>  default=multi(0)disk(0)rdisk(0)partition(1)<BR>  [operating systems] <BR>  multi(0)disk(0)rdisk(0)partition(1)="microsoft windows 2000 advanced server" /3g /fastdetect</P>
<>  注意在启动win2k advserver的一栏里,多了一个 /3g 参数。这个参数的作用,就是让windows启动时,将自己的内核及支持程序装载到内存地址 0xc0000000 到 0xffffffff 之间,给应用程序留出3g的空间来。 </P>
<P>  3 修改oralce 的 init.ora 文件 </P>
<P>  ..1) 确定oracle的缓冲区及共享池大小,假设作如下定义: <BR>  ........ db_block_size = 4096 <BR>  ........ db_block_buffers = 262144 # 缓冲区大小为1g<BR>  ........ share_pool_size = 314572800 # 使用300m共享池 <BR>  <BR>  ..2) 添加下列各项内容: <BR>  ........ use_indirect_data_buffers = true <BR>  ........ # 告诉oracle可以使用间接内存(即可以使用windows让出来的1g内存作为数据缓冲区)   ........ pre_page_sga = true <BR>  ........ # 把oracle sga锁定到内存中,不产生页面交换文件(8i的参数可能是lock_sga = true) <BR>  ........ # 对于一个有4g物理内存的系统来讲,可能这一个参数并不是必须的 </P>
<P>  4 修改注册表,定义oracle的dbbuffer使用常规内存大小 </P>
<P>  ....在注册表 _local_machine中添加一个二进制值,名称为awe_window_memory ,值的单位为字节,大小为你需要让oracle使用普通内存作为缓存的大小(不是windows让出来的1g,而是内存地址在0x00000000 到 0x7fffffff 之间的内存大小)。假如设为209715200,即200m大小,那么oracle的数据缓冲区将占用200m的普通内存,其余部分(1g - 200m = 824m)则使用间接内存。 </P>
<P>  5 重新启动操作系统,启动数据库。ok,你现在的 oracle 可以使用2g + 824m内存了。 </P>
<P>  四 几个补充讨论 </P>
<P>  1 windows系统“让”出来的1g间接内存,只能用于数据缓冲区 </P>
<P>  ....在4gt特性测试中发现,间接内存只能用于数据缓冲区,而不能用于共享池,也不能分配给用户作为pga。或许有其他的参数可以定义,但我查到的文献中没有任何一篇讲间接内存可以用于哪些地方,而在我们的测试中发现按上面的修改后,间接内存只能用于数据缓冲区。此结论只作为一个经验,不是定论,请各位大侠补充修正。 </P>
<P>  2 注册表中 awe_window_memory 参数大小的定义 </P>
<P>  ....这个参数定义缓冲池使用普通内存的大小,不能太小。在数据块大小为4k,缓冲池为1g(即使用262144个块作缓冲池)大小的情况下,此参数定义为100m时,oracle不能启动,定义为200m时正常启动。根据我阅读文献后对这个情况的理解,数据缓冲区的每一个块的块头信息都将存放于普通内存中,不能存放于间接内存中。如果此参数定义过小,导致缓冲区块头信息都不能存放,则可导致数据库启动失败。那么,是不是同样大小的缓冲区,数据库块越大,则这个参数就可以定义得越小,因而可以占用更少的普通内存呢?有待验证。 <BR>  <BR>  ....在具体的应用中,如何定义此参数,应综合考虑最大并发连接数(专用服务器模式下)、用户重用的堆栈大小、排序区、共享池、大池等内存参数的设置情况,尽可能的将数据缓冲区放到间接内存中,充分利用系统的资源。   </P>
<P>  3 间接内存的性能 ....据oracle的文献讲,间接内存的性能(我想主要是指速度和效率吧?)不如直接内存,绝不推荐在未安装有4g物理内存的系统上使用4gt特性。我不知道如何比较间接内存与直接内存的速度和效率,因而未作测试,姑且信之。 </P>
<P>  ....一点小结,期望能对大家有所启发。还请各位大侠补充指正。 </P>
<P>  以上内容的测试环境: ibm x360 +4g内存 + raid 5阵列 windows 2000 advaced server sp3 + oracle 8.1.6 专用服务器模式  </P>
免责申明1、欢迎访问本站,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@fmlist.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|爱谁谁社区 ( 鲁ICP备14013101号-3 )

GMT+8, 2024-11-21 16:49 , Processed in 0.027866 second(s), 9 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表