关于32位oracle扩展SGA的一些问题

由于32位下操作系统的进程访问4g(2的32次方)以下的虚拟地址,而这4g的地址又要为内核、可执行代码、共享库等保留地址空间,所以,实际上可以留给SGA的空间只有1.7G左右。

但32位的linux 为可执行代码、共享库保留的地址空间太大,我们可以降低这部分的地址空间,腾出更多的虚拟地址空间给SGA,从而达到扩展SGA的目的。


关于32位oracle扩展SGA的一些问题:

一、扩展的基本步骤
1. lowering the mapped_base in Linux
降低linux进程的mapped_base。这步需要用shell修改进程的mappend_base。
步骤如下:
1)创建一个shell脚本,假设叫/usr/bin/lower_mapped_base.sh,脚本内容如下:

#/bin/sh
echo 268435456 > /proc/$PPID/mapped_base

2)修改脚本的属性
分别执行如下命令:
chown root.root lower_mapped_base.sh
chmod 755 lower_mapped_base.sh

3)授权,使其他用户可以通过sudo执行该脚本

echo "oracle ALL=NOPASSWD: /usr/bin/lower_mapped_base.sh" >> /etc/sudoers

4)让oracle用户登录时自动执行脚本
在oracle用户下执行:
echo "sudo /usr/local/bin/ChangeMappedBase" >> ~/.bash_profile

或者直接编辑~/.bash_profile文件,假如下面这一句:
sudo /usr/local/bin/ChangeMappedBase

到这里,这一步工作就算完成了。
注意:
1)进程与oracle共享库的mapped_base必须一致,否则会出错。如用修改了进程的mapped_base的服务器的sqlplus连接没有编译过共享库的数据库,就会报错。
2)这一步骤只需要在Linux as 2.1上执行,在linux as3/4上,共享库的mapped_base已经降得很低,不需要再手工去降低它了。


2. lowering the sga_base in Oracle
降低SGA的起点,也就是sga_base。这步需要编译oracle的共享库。步骤如下:
1)关闭数据库,并进入相关目录
SQL> shutdown

cd $ORACLE_HOME/rdbms/lib

2)在修改前做备份
如果ksms.s文件不存在可跳过这一步
[[ ! -f ksms.s_orig ]] && cp ksms.s ksms.s_orig

3)修改SGA起点地址
genksms -s 0x12000000 > ksms.s

其中0x12000000表示300M,可以从下面查到(默认是0x40000000,相当于1G)
SQL> select to_number('12000000','xxxxxxxxxxxxxxx') from dual;

TO_NUMBER('12000000','XXXXXXXX
------------------------------
301989888

4)新建ksms文件

make -f ins_rdbms.mk ksms.o

5)重新编译
实际上是重新生成$ORACLE_HOME/bin/oracle这个文件:
make -f ins_rdbms.mk ioracle

到此,降低SGA起点得工作就完成了。

二、不同版本的linux必须执行的步骤

其中1表示lowering the mapped_base in Linux
2表示lowering the sga_base in Oracle

9iR2 10gR1 10gR2*
====================================
RHEL 2.1 x86 1,2 1,2 ---
RHEL 3 x86 2 2 2*
RHEL 4 x86 2 2 2*
SLES 8 x86 1,2 --- ---
SLES 9 x86 1,2 1,2 1,2**

从以上图表可以看出,要扩展SGA:
. linux 2.1需要执行两个步骤
. linux as3/4都只需要执行第二个步骤。
. 10g r1需要执行第二步
. 10g r2两个步骤都不需要执行

执行了扩展SGA的步骤后,理论上可使用的SGA大小为:
. 9i/10g r1在smp kernel 内核下为2.7 G
. 9i/10g r1在hugemem kernel下为3.42G(不扩展的话为2.7G)
. 10g r2在smp kernel 内核下为2.2 G
. 10g r2在smp kernel 内核下为3.3 G


三、其它问题

1、以上讨论都是基于不使用VLM前提的。实际上,在LINUX AS 2.1/3可以使用VLM,可以把32位的linux虚拟成36位的,这样就不需要以做以上步骤来扩展SGA了。
2、不同的linux内核下在不同的oracle版本下可使用的最大SGA是不一样的

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/231499/viewspace-63749/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/231499/viewspace-63749/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值