扩oracle的sga,关于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是不一样的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值