在没有任何附加改动的情况下,32位linux上Oracle对SGA的默认配置最大为1.7GB 。在微小改动的情况下,可以分配最大占用2.7GB RAM空间的SGA。如果大小要超过4GB就要做其他改动。
注意{运行hugemem kernel模式时,相应的限制分别是2.7GB和3.7GB。由于hugemem内核存在额外开销,因此只有在系统RAM不低于16GB的情况下才运行hugemem内核。}
为了分配大于1.7GB小于2.8GB的SGA,在Oracle启动时必须减小基地址,称之为映射基地址(mapped base)。可以采取下面的步骤减少基地址的映射:
(1) cd $ORACLE_HOME/rdbms/lib
(2)利用genksms命令创建一个汇编文件:
genksms -s 0x15000000 > ksms.s
(3)生成对象文件
make -f ins_rdbms.mk ksms.o
(4)生成Oracle可执行文件:
make -f ins_rdbms.mk ioracle
接下来需要做的事把共享内存参数SHMMAX增加到1.7~2.7GB,并用新编译生成的代码启动Oracle。
为了使用大于2.7GB的SGA,采用以下方法。
创建RMAN磁盘,RAM磁盘创建完毕后,使用间接数据缓冲区(indirect data buffer)配置Oracle。它本质是Oracle用于数据库块缓冲区的RAM磁盘文件。使用RAM磁盘可以避开所有的32位限制。
安装了ramfs类型的文件系统可以创建RMAN磁盘。Red Hat ES 3.0之前使用shmfs,在3.0后则用ramfs创建,使用一下语法:
umount /dev/shm
mount -t ramfs ramfs /dev/shm
chown oracle:dba /dev/shm
将下面内容加入文件/etc/security/limits.conf中:
oracle soft memlock 3145728
oracle soft memlock 3145728
如果用ssh登陆系统,将下面一行加入到/etc/init.d/ssh中:
ulimit -l 3145728
在Oracle初始化参数中加入”use_indirect_data_buffer=true”。
为了使用大型内存模型,接下来需要把Linux共享内存设置到足够大。用下面的方法把共享内存最大值设置为8GB:
echo 8589934592 > /proc/sys/kernel/shmmax
或者把下面一行加入到/etc/sysctl.conf文中:
sys.kernel.shmmax= 8589934592
并执行 sysctl -w
注意: 间接数据缓冲区只能用作Oracle块缓冲区。低端内存仍用于其它内存共享项目,例如共享池或日志缓冲区。
Leave a Reply