Oracle在SUN Solaris和Linux平台中的共享内存和信号灯内核参数的设置

2/9/2008来源:Oracle教程人气:5719


  Oracle在SUN Solaris和linux平台中的共享内存和信号灯内核参数的设置一些预备知识

  shared memory:共享内存段:
  一个内存区域,可以被不同的进程读取。Oracle使用它来构成SGA。Oracle使用以下三种方法来创建一个SGA区:
  1. 使用单个共享内存段。
  2. 使用连续多个共享内存段。
  3. 使用多个不连续共享内存段。
  Oracle优先使用的一种方法,假如成功,则继续初始化,不成功则使用第二种方法,再不成功则使用第三种方法。假如再不成功,则初始化失败,Oracle报告错误代码。

  Semaphore:
  可以看作一个标记。可以有On和Off两种状态。Oracle使用semaphores来实现服务器进程对SGA区的存取控制。
Shared memory 和semaphore 是Oracle在Unix上运行的重要资源。假如Oracle 实例得不到所需要的资源,实例启动就会失败。

  参数:
  对于运行一个Oracle实例的Solaris系统,改变/etc/system文件中的一些关于共享内存的参数,对于Linux平台,则改变 /etc/sysctl.conf文件中的一些关于共享内存的参数。以使Oracle实例可以正常运行。假如有多个实例的话,还需根据下面方法重新计算某 些值。

  shmmax
  含义:这个设置并不决定究竟Oracle数据库或者操作系统使用多少物理内存,只决定了最多可以使用的内存数目。这个设置也不影响操作系统的内核资源。
  设置方法:0.5*物理内存
  例子:Set shmsys:shminfo_shmmax=10485760

  shmmin
  含义:共享内存的最小大小。
  设置方法:一般都设置成为1。
  例子:Set shmsys:shminfo_shmmin=1:

  shmmni
  含义:系统中共享内存段的最大个数。
  例子:Set shmsys:shminfo_shmmni=100

  shmseg
  含义:每个用户进程可以使用的最多的共享内存段的数目。
  例子:Set shmsys:shminfo_shmseg=20:

  semmni
  含义:系统中semaphore identifierer的最大个数。
  设置方法:把这个变量的值设置为这个系统上的所有Oracle的实例的init.ora中的最大的那个PRocesses的那个值加10。
  例子:Set semsys:seminfo_semmni=100

  semmns
  含义:系统中emaphores的最大个数。
  设置方法:这个值可以通过以下方式计算得到:各个Oracle实例的initSID.ora里边的processes的值的总和(除去最大的Processes参数)+最大的那个Processes×2+10×Oracle实例的个数。
  例子:Set semsys:seminfo_semmns=200

  semmsl:
  含义:一个set中semaphore的最大个数。
  设置方法:设置成为10+所有Oracle实例的InitSID.ora中最大的Processes的值。
  例子:Set semsys:seminfo_semmsl=-200

  改变了/etc/system或/etc/sysctl.conf里边以上参数以后,重新启动计算机:
  $reboot
  然后检查当前的参数:
  $sysdef -I
  假如系统参数仍然没有改变得话,使用以下命令:
  $modload /kernel/sys/shmsys。