2009年3月29日星期日

window下如何配置sybase使用最大内存

在32位的操作系统如win2K上,操作系统能管理的内存为4GB,sybase使用的总内存有2G限制。目前大多数unix服务器都能为数据库配上4G物理内存甚至更多,但无论你为系统配置多大的物理内存,正常情况下都不能使sybase使用超过2G的内存,从而造成系统资源浪费。那么,有没有什么办法能使运行在windows系统上的sybase使用超过2G的内存呢?windows 提供了一种叫4GT(4G Tuning)的技术,使得sybase使用超过2G(不超过3G)的内存成为可能。而为了让应用程序使用更大的内存,还有一种PSE36的技术,可以让sybase使用超过3G的内存。这里,介绍如何使用4GT特性让sybase使用超过2G的内存。

1。打开操作系统的3G开关
首先修改boot.ini文件,在C盘根目录下。加入/3G参数:
[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
然后从起机器,使/3G参数生效

2。将NT的虚拟内存调整到3G以上。
这一步不用多说了,右键单击我的电脑选属性。


3。打开sybase使用超过2G内存的开关
进入/ASE-12_5/bin下,备份sqlsrvr.exe。
在/ASE-12_5/bin目录下执行:imagecfg sqlsrvr
imagecfg.exe可以从网上下载,我就是在google上搜索的,http://www.robpol86.com/tutorial ... g的安装和使用方法。
执行后如果显示下面的内容则说明2G开关未打开
sqlsrvr.exe contains the following configuration information:
Subsystem Version of 4.0
Stack Reserve Size: 0x20000
Stack Commit Size: 0x4
如果2G开关未打开,则执行:imagecfg -l sqlsrvr.exe
再执行imagecfg sqlsrvr.exe,应显示下面内容:
sqlsrvr.exe updated with the following configuration information:
Subsystem Version of 4.0
Image can handle large (>;2GB) addresses
Stack Reserve Size: 0x20000
Stack Commit Size: 0x4
此时sybase的2G开关已经被打开。

4。配置数据库参数
打开数据库配置文件,修改total memory到2.2G。
修改shared memory starting address参数到23662592(十进制的数)
重启数据库。

以上是配置的全过程。下面解释一下为什么配置totol memory到2.2G和23662592的来源。
shared memory starting address 参数并不是大小,而是一个地址,它指定sybase从什么地方开始使用内存。在NT操作系统可以管理的4G内存中,0到7fffffff是供应用程序使用的,80000000到FFFFFFFF是保留给操作系统使用的。如果3G开关打开,0到BFFFFFFF提供给应用程序使用,C0000000到FFFFFFFF保留给操作系统。
应用程序使用内存是从0开始的,0到FFF提供给guard page,至于什么叫guard page本人也不是很清楚,从字面理解吧。
sqlsrvr.exe从400000开始占用内存,很多lib文件,比如libct、libsrv被装载在400000的上下,那么从400000以上的某个地方起,我们边得到一个整块的空间用于应用程序。
默认情况下(shared memory starting address 参数为default时),sybase的total memory从20000000开始使用内存,那么从20000000到7FFFFFFF就有1.5G空间,如果打开3G参数则是从20000000到BFFFFFFF,即2.5G空间。这就是为什么在nt上的sybase的total memory无法配过1.5的原因所在。
但实时上,这1.5或2.5的空间并不能完全由sybase支配,系统会在内存顶端,也就是从7FFFFFFF开始向下装载一些dll文件,因此sybase在shared memory starting address 参数为default时可用空间在20000000到某个比7FFFFFFF小的值,也就是1.4G左右吧。
可见7FFFFFFF一段是个死的限制,如果想让sybase使用更多的内存只有打破shared memory starting address 参数从20000000开始的限制。配置shared memory starting address 参数的目的就在于此。
配置shared memory starting address 参数等于23662592的目的就在于使sybase从地址低于20000000的地方开始使用内存,23662592转换成16进制为1691000,配置这个参数后,sybase可用空间就变为从1691000到7FFFFFFF,也就是1.9G,如果打开了3G参数,则是从1691000到BFFFFFFF,也就是2.9G。
那么为什么推荐23662592呢?这是sybase公司的经验值,如果这个值太低则会引起操作系统在分配内存时的错误,因为空间都被压缩的很小了嘛。

没有评论:

PAUL2SMOON 的共享项目