oracle分配物理内存,Oracle内存分配与调整(下)

本文详细介绍了如何在REDHAT ADVANCED SERVER2.1、HP TRUE64 UNIX、32BIT SOLARIS、HP-UNIX 11.0和IBM AIX RS6000以及Windows平台上扩展Oracle的SGA,以突破1.7GB的限制。通过修改系统参数、配置核心文件、设置环境变量等方式,可以实现SGA的扩展,以适应更大规模的数据处理需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle内存分配与调整(下)

但是在特定的操作系统下,可能提供了一定的手段,使得我们可以使用超过1.7G的内存,达到2G以上甚至更多。在这里我们针对不同的平台下的具体实现方式做一个总结。

一.在REDHAT ADVANCED SERVER2.1上扩展SGA(1.7G以上)

能够在一个4G以上内存的机器上将SGA从1.7G的最大限制增大至2.7G,兼容Oracle8.1.7、9.0.1、9.2.0版本的数据库,但是只是允许在本地启动和关闭数据库,而且如果为PGA保留的虚拟内存太小就会导致ORA-4030的错误。

具体步骤如下:

1.查看启动Oracle用户的shell的进程号PID

ps –f或者echo $$

2.以root用户单独打开一个进程,执行

echo 268435456 > /proc/$PID/mapped_base

注:Lowing the mapped_base要对服务器上所有产生Oracle的进程的shell。可以写一个脚本在.profile或者.login文件中使其每次都不必手工去做。

一个脚本的例子,使用setuid()设置/proc//mapped_base:

int main(int argc,char * argr[ ])

{

pid_t,ppid;

char buf[256];

unsigned long mapped_base;

int ret;

#define NEW_MAPPED_BASE 0X10000000

ppid=getppid();

mapped_base=NEW_MAPPED_BASE;

sprintf(buf,”echo %/u >/proc/%u/mapped_base”,mapped_base,ppid);

setuid(0);

ret=system(buf);

if (ret==0)

printf(“Lowering mapped_base of pid=%u to 0x%X \n”,ppid,mapped_base);

else

printf(“unable to lower mapped_base.You might need to:\n”

“chmod 4711 lowermap \n chown

root root lowermap \n”);

exit (-ret);

3.修改shmmax的值,以root用户执行:

echo 3000000000 > /proc/sys/shmmax

4.重新分配SGA

关闭所有Oracle实例

cd $ORACLE_HOME/lib

cp –a liberver9.a libserver9.a.org (对要修改的libserver9.a文件做个备份)

cd $ORACLE_HOME/bin

cp –a oracle oracle.org

cd $ORACLE_HOME/rdbms/lib

genksms –s 0x15000000 > ksms.s

make –fins_rdbms.mk ksms.o (编译新的SGA地址)

make –fins_rdbms.mk ioracle(重新链接)

这样修改之后就可以支持到2.7G左右的SGA,从而可以提高db_cache_size或者db_block_size去提高数据库的缓冲区了。

5.如果你已经有了一个较大的buffer cache,并且在init文件中设置了use_indirect_data_buffers=true,可以用以下的方法去提高indirect buffer window

size。对于大多数的应用来说默认的512M已经足够,增大window size可以略微的提高性能,因为大的window size可以减少mapping一个indirect buffer到oracle的地址空间的负载。

设置环境变量VLM_WINDOW_SIZE在启动实例之前,这个值比如是64K的整数倍。例如:

export VLM_WINDOW_SIZE=1073741824(1G)

注:这么设置的前提是buffer cache不能太大,SGA区不能小于800M。如果在启动实例的时候报错,则有可能是需要清除共享内存段

ipcrm shm xxx或者ipcrm sem xxx

二.HP TRUE64 UNIX上扩展SGA大于2G

1.检查是否有足够的内存分配给SGA

userf –r 300

|grep –i mem

2.配置核心参数文件/etc/sysconfigtab文件

vm:

vm-maxvas=实际物理内存

vm-mapentires=400

ubc-minpercent=1

ubc-maxpercent=2

ipc:

shm-max=实际物理内存或者大于SGA

shm-mni=128

shm-seg=32

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值