可以理解为semaphore为每个进程通讯需要的信号灯或者IPC标志,每个连接的process都要分配一个semaphore,那么
semaphore的设置跟process的数量有关系.
semaphors的相关设置在REHL、OEL中可
通过kernel.sem参数定义.通过下面的任何一种方法都可以查看sem的值:
[root@dbtest vm]# sysctl -p|grep kernel.sem
kernel.sem = 250 35000 100 128
或者
[root@dbtest vm]# cat /proc/sys/kernel/sem
250 35000 100 128
或者
[root@dbtest vm]# ipcs -sl
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 35000
max ops per semop call = 100
semaphore max value = 32767
这个参数有四个值, 其实这四个不同的值又分别对应了另外四个不同的参数,按照上面值的顺序排列
SEMMSL: Maximum number of semaphores per set
SEMMNS: Maximum number of semaphores system-wide
SEMOPM: Maximum number of semaphore operations per system call
SEMMNI: Maximum number of semaphore sets for the entire Linux system
在Suse Linux中这几个参数是独立存在的.
Oracle(包括9i/10g/11g)推荐将sem设置为250 32000 100
128或更高的值.在一个并发很高的数据库中这个值可以设置为PROCESSES+10,SEMMNI也要相应的增加.目的是减少IPC通讯时
semaphore的争用.
SEMOPM定义了每次IPC调用时影响的semaphore,建议设置SEMOPM=SEMMSL,SEMMNS定义为(SEMMSL
* SEMMNI).
实际上每个系统都对上述参数有各自推荐的配置.
最后可以参考MetaLink: Note:187405.1、 Note:184821.1、242529.1