ASE内存的使用,现在贴上我测试的一个例子,可能更容易说清楚问题。
环境 vmware 下的linux 1CPU 320M内存,shmmax 256M , Sybase 12.53
ASE的配置
max memory 是131072,(256M)
allocate max shared memory=0
default data cache 80M
procedure cache size 3271 (6M)
total physical memory 63493 =124M 应该是data cache cache的值80+ procedure cache size 6M +其他系统的开销。
从这个配置看从 dafault data cache 还能增加256-124=120M
sp_configure "default data cache","200M"之后
total cache size 218M
total physical memory 131072=256M
当allocate max shared memory 为0 (缺省值)时候,ASE并不直接获取max memory 所设定的值,而是根据配置的各项需要内存的参数值想OS申请内存,从 total physical memory 可以看到,目前ASE从OS一共获得了多少内存。
由于在linux系统中,ASE能获得的最大内存受到操作系统SHMMAX值的限制,而我的测试环境中这个值是256M,我们来修改一下max memory将其值超过256M看一下。
sp_configure "max memory",153600
这个时候,无论是修改这个参数,还是重启ASE都是没有问题的。虽然理论上ASE能够使用的最大内存已经超过了操作系统SHMMAX参数的限制,但由于allocate max shared memory 配置的是0 ,仅当需要内存的时候才会想OS申请内存;这个时候我在ASE中各项需要内存的参数总值没有超过256M,所以没有任何的问题。但需要注意的是,此时的max memory设置的值仅仅是一个假象,并不代表你一定能使用它。
增加dafalut data cache的值,sp_cacheconfig "default data cache","240M"
修改是能成功,但重启ASE的时候,报错
kernel os_create_region:can'n allocate 308498432 bytes
kernel kbcreate:couldn't create kernel region。
明显不能获取内存了。
或者在保持 default data cache的大小不变的情况下,将allocate max shared memory的值改成1,重启,也无法成功,同样报不能获得内存。
这个测试说明虽然max memory的值能设置的超过SHMMAX,但实际ASE的内存使用并无法超过这个参数的设置。
回到开始的参数:
max memory 256M,allocate max shared memory =0
defalut data cache 80M
执行sp_cacheconfig "default data cache","240M",会显示
The current 'max memory' value '131072,is not sufficient to change the size of cache 'default data cache' to '240M'(245760KB).'max memory'should be greater than 'total logical memory' '150636' required for the configation.
这个错误显示当前的max memory 值小了,不足以扩展default data cache到240M,max memory 至少需要150636 (294M)
引用:http://www.cublog.cn/u1/46790/showart_1710066.html
|