修改/etc/sysctl.conf 文件:
kernel.shmmax
用于定义单个共享内存段的最大值,shmmax设置应能在一个共享内存段下容纳下整个的SGA,设置的过低导致创建多个共享内存段,可能导致系统性能的下降 。
设置shmmax>=SGA(32位系统不支持1.7G 以上SGA)
kernel.shmall
控制共享内存页数 。Linux共享内存页大小为4K, 共享内存段的大小为共享内存页大小的整数倍。物理内存/内存页大小,通过grep MemTotal /proc/meminfo查看内存大小;getconf PAGE_SIZE查看页大小。内存小的机器,按照oracle官方文档最小值设定。
kernel.shmmni
系统内共享内存段的最大数量(注意不是shmmin)。shmmni缺省值4096 足够。
kernel.sem = 250 32000 100 128
上面的4个数据分别对应:SEMMSL、SEMMNS、SEMOPM、SEMMNI这四个参数。
SEMMSL:控制每个信号集的最大信号数量。
建议将 SEMMSL 设置为系统中的所有数据库中的最大PROCESS实例参数的设置值再加上10。此外,建议将SEMMSL的值设置为不少于 100 。
SEMMNS:控制整个Linux系统中信号(而不是信号集)的最大数。
建议将SEMMNS设置为:系统中每个数据库的PROCESSES实例参数设置值的总和,加上最大 PROCESSES 值的两倍,最后根据系统中Oracle数据库的数量,每个加10。 使用以下计算式来确定在 Linux 系统中可以分配的信号的最大数量。它将是以下两者中较小的一个值:SEMMNS或(SEMMSL * SEMMNI)
SEMOPM: 控制每个semop系统调用可以执行的信号操作的数量。
semop 系统调用(函数)提供了利用一个 semop 系统调用完成多项信号操作的功能。一个信号集能够拥有每个信号集中最大数量的SEMMSL 信号,因此建议设置 SEMOPM 等于SEMMSL。
SEMMNI :内核参数用于控制整个 Linux 系统中信号集的最大数量。
建议将SEMMNI的值设置为不少于 100 。
立刻生效命令# sysctl -p
通过ipcs命令查看信号量和共享内存段