关于Linux下kernel.shmmax的设置问题

  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.

  按照oracle的解释,SHMMAX应该比SGA区大啊.否则会引发性能的下降!

  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时,常常需要修改内核文件/etc/sysctl.conf,需要设置这个参数.

  设置oracle共享内存段:

  以root身份进行修改 /etc/sysctl.conf 这个文件,加入以下的语句:

  kernel.shmmax =&nbsp2147483648
  kernel.shmmni =&nbsp4096
  kernel.shmall =&nbsp2097152
  kernel.sem =&nbsp250&nbsp32000&nbsp100&nbsp128
  fs.file-max =&nbsp65536
  net.ipv4.ip_local_port_range =&nbsp1024&nbsp65000

  注:

  sem &nbsp4个参数依次为SEMMSL(每个用户拥有信号量最大数);
  SEMMNS(系统信号量最大数);
  SEMOPM(每次semopm系统调用操作数);
  SEMMNI(系统辛苦量集数最大数)。
  Shmmax 最大共享内存2GB
  物理内存如果小的话可以设置成&nbsp536870912。
  Shmmni 最小共享内存&nbsp4096KB。
  Shmall 所有内存大小。

  一般情况下可以设置最大共享内存为物理内存的一半,如果物理内存是&nbsp2G,则可以设置最大共享内存为&nbsp1073741824,如上;如物理内存是&nbsp1G,则可以设置最大共享内存为&nbsp512 *&nbsp1024 *&nbsp1024 =&nbsp536870912;以此类推。

  在redhat上最大共享内存不建议超过

  4*1024*1024*1024-1=4294967295

  设置完成后用命令&nbspmore /etc/sysctl.conf |grep&nbspkernel.s 检查。

  建议重启系统再继续下面的操作。