马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
关于Linux 下kernel.shmmax 的设置问题
下面是Oracle 文档上的解释, http://download-west.oracle& ... e.htm#sthref107 SHMMAX Available physical memory Defines the maximum allowable size of one shared memory segment.
The SHMMAX setting should be large enough to hold the entire SGA in one shared memory segment. A low setting can cause creation of multiple shared memory segments which may lead to performance degradation.
shmmax 的含义是单个共享内存段的最大尺寸, 设置shmmax=1G,sga分配了1.2G,当启动实例的时候就分配 2 块共享内存给Oracle . 如果物理内存是 2 G, 假设这台DB Server上还有Apache 在运行,那么shmmax 中设置的内存也会被Apache 来使用,那么分配的 2 块共享内存段给Oracle 是否就是 2 * 1G , 还是仅仅满足 SGA需求的 1.2 G就停止分配 , 其他的内存的一部分分配给Oracle PGA 和软件 Apache 来使用 ? 答: 看Oracle Document 说法 , 当需要分配多个 ( creation of multiple shared memory segments ) 共享内存段的时候会导致性能下降 。 如果偶尔分配需要 2 个共享内存段 ,性能应该不会受到太大影响吧 。
shmmax内核参数定义单个共享内存段的最大值,如果该参数设置小于Oracle SGA设置,那么SGA就会被分配多个共享内存段。这在繁忙的系统中可能成为性能负担,带来系统问题。
设置: 一些资料说内存大过2g的,就按shmmax=shmall*1*1024(shmall=实际内存*1024) ,有的说大过2g的就按2g的算,shmall=2097152=2048*1024,shmmax=shmall*1*1024=2147483648
现在的情况是我按第一种说法安装9i,我的服务器内存是8G的设,到最后报ORA-27012ut of memory 错误,数据库无法启动,而按第二种就没事,请高手指点,这个值到底怎么设置合理?
答: 对于32bit的linux来说,不管实际的内存有多大,shmmax的最大值不应该超过 4294967295。
对于rh3,正常情况下oracle的sga只能开到1.7G左右(即使你有8G的memory),即使经过某些调整,如Hugetlb,最多也只能将SGA<3G.
oracle在设置sga的时候,会参考系统的内核参数,如shmmax等。
配置Linux的内核参数 [root@myhost~]#vi/etc/sysctl.conf #ForOracle kernel.shmmax=1073741824(改成服务器内存的一半,我的服务器是1G,所以都算进去了,1024*1024*1024) kernel.shmmni=4096 kernel.shmall=1073741824 kernel.sem=25032000100128 fs.file-max=65536 net.ipv4.ip_local_port_range=102465000
修改/etc/sysctl.conf文件。其中的几个参数的含义是: kernel.shmmax表示最大共享内存,如果小的话可以按实际情况而定,一般为物理内存的一半,不过我的虚拟机只有256M,所以就全部算进去了。 shmmni表示最小共享内存固定4096KB shmall表示所有内存大小 sem4个参数依次是SEMMSL:每个用户拥有信号量最大数,SEMMNS:系统信号量最大数,SEMOPM:每次semopm系统调用操作数,SEMMNI:系统辛苦量集数最大数。这4个参数为固定内容大小。 file-max固定大小65536 ip_local_port_range表示端口的范围,为指定的内容。 |