yinxin
作者yinxin·2011-01-16 16:42
系统管理员·银信长远

64位redhat linuxe as3 ,oracle9204,机器有8G内存

字数 927阅读 2628评论 0赞 0

以前在32位系统下,shmmax的含义是单个共享内存段的最大尺寸,比如你设置shmmax=1G,sga分配了1.2G,当启动db时就分配2块共享内存给oracle。可是最近在64位上测试,发现当设置shmmax <= 956301311时,sga的分配规律和32位上一样。
但是如果设置shmmax > 956301311,则如果sga设置的值大于shmmax的值且大于2.3G时,启动数据报错:
SQL> startup
ORA-27123: unable to attach to shared memory segment

下面是个在64位上的测试结果:


shmmax值 SGA值 分配共享内存是否成功

956301311 800M yes(一个共享内存块)
956301311 1.7G yes(三个共享内存块)
956301311 2.3G yes(五个共享内存块)
956301312 800M yes(一个共享内存块)
956301312 1.7G yes(三个共享内存块)
956301312 2.3G no
956301311 2.35G no
1G 2.35G no
2G 2.35G no
2.3G 2.35G no
2.4G 2.35G yes(一个共享内存块)
2.4G 2.6G no
2.8G 2.6G yes(一个共享内存块)
3.4G 3.5G no
3.6G 3.5G yes(一个共享内存块)
4.4G 4.5G no
4.6G 4.5G yes(一个共享内存块)
5.4G 5.5G no
5.6G 5.5G yes(一个共享内存块)
6.4G 6.5G no
6.6G 6.5G yes(一个共享内存块)

结论:在64位系统上,
当SGA<=2.3G,shmmax<=956301311时,分配内存成功,其中当SGA>shmmax时会分配多个内存段;
当SGA>2.3G,shmmax>(SGA值+大约100M)时,分配内存成功,都是一个内存段;

附注:1、2.3G只是一个大概的值,精确值没有具体测出来,误差50M左右
2、对于shmmax参数最简单得处理方法就是设置一个很大的值,比如8G、16G。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广