在32bit或者64bit的平台上跑32bit的Oracle的时候,SGA总是受到限制,导致大内存的机器不能完全发挥作用,最近就专门找了一些关于调整最大SGA区的文档,看了看,感觉收获蛮大的,总结了一下几个平台的,但是不全,欢迎大家探讨补全。
我先把我总结的几个平台贴出来大家讨论讨论。
在REDHAT ADVANCED SERVER2.1上扩展SGA(1.7G以上)
一. 目标:
1. 在一个4G以上的内存的机器上将SGA从1.7G增至2.7G
2. 兼容8.1.7,9.0.1,9.2.0版本的数据库
3. 整个SGA都能够被提高
二. 限制:
1. 只答应在本地启动和关闭数据库
2. 假如为PGA保存的虚拟内存太少就会导致ORA-4030的错误
三. 基本步骤:
1. 查看启动oracle用户的shel的进程号PID
ps -ef或者echo $$
2. 以root用户单独开一个进程,执行:
echo 268435456
/proc/$PID/mapped_base
这个要对server上所有产生oracle进程的shell
3. 修改shmmax的值。用root用户执行
echo 3000000000
/proc/sys/shmmax
4. 重新分配SGA
shutdown immediate所有的oracle实例
cd $ORACLE_HOME/lib
cp –a libserver9.a libserver9.a.org(备份liberver9.a文件)
cd $ORACLE_HOME/bin
cp –a oracle oracle.org(备份oracle文件)
cd $ORACLE_HOME/rdbms/lib
genksms –s 0x15000000 ksms.s
make –f ins_rdbms.mk ksms.o(编译新的sga地址)
make –f ins_rdbms.mk ioracle(重新链接)
这样改过以后就可以支持到2.65G的sga,从而可以提高db_cache_size或者db_block_buffers去提高数据库的缓冲区了。
True64 Unix上使SGA大于2G
1. 检查是否有足够的内存能够分配给SGA
userf –r 300 grep –i mem
2. 配置核心
vm:
vm-maxvas=实际物理内存
vm-mapentries=400
ubc-minpercent=1
ubc-maXPercent=2
ipc:
shm-max=物理内存或者大于SGA
shm-mni=128
shm-seg=32
proc:
max-per-proc-data-size=物理内存
per-proc-data-size=物理内存
max-per-proc-address-space=物理内存
per-proc-address-space=物理内存
不要修改/etc/sysconfigtab文件中的参数位置。
/sbin/sysconfig –q vm
/sbin/sysconfig –q ipc
/sbin/sysconfig –q proc
3. 设置环境
对于C Shell,修改.login文件
limit datasize unlimited
limit stacksize unlimited
limit memoryuse unlimited
limit addressspace unlimited
对于Korn或者Bourn Shell,修改.login文件
ulimit –d unlimited
ulimit –s unlimited
ulimit –m unlimited
ulimit –v unlimited
4. 重新分配SGA
设置init文件中参数vlm_sga_base_address参数
例如:超过了3G,设置vlm_sga_base_address=0x400000000
5. SWAP区的设置
建议设置成2-3倍的物理内存