全部博文(389)
分类: Oracle
2013-08-08 08:59:16
为什么要设置linux semaphore参数
通过ipcs -s 可以看到SEMAPHORE,在这里可以看到NSEMS是254(环境基于RHEL 6(32BIT),ORACLE DATABASE 11.2.0.1.0)
[root@hy1 oracle]# ipcs -s
------ Semaphore Arrays --------
key semid owner perms nsems
0x39c3211c 1671170 oracle 660 254
这个254表示什么呢?是ORACLE进程数吗?
[root@hy1 oracle]# ps -eaf | grep oracle | wc -l
50
可能看到整个ORACLE用户的进程只有 50
经常官方文档建议这个参数设置为PROCESSES再加150,那么这个参数和PROCESSES应该有关,
SQL> show parameter processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
processes integer 250
在这里PROCESSES为250,其他的4代表什么呢?
使用oradebug ipc可以跟踪当前的IPC情况
Maximum processes: = 250
Number of semaphores per set: = 254
Semaphores key overhead per set: = 4
User Semaphores per set: = 250
Number of semaphore sets: = 1
Semaphore identifiers: = 1
Semaphore List=
1671170
可以看到4为SEAMPHORE本身的开销,再加上PROCESSES定义的大小,刚好是254
kernel.semmsl 定义了一个信号集的信号数,这个参数设置建议为PROCESSES+150,当然系统的默认设置128也不会有问题
但是需要请求多个信号集,从某种程度上来说降低了效率
kernel.semopm定义了每次信号函数能操作的最大信号数,建议和semmsl相等,这样一次调用就能完成所有的集号操作,而不
需要多次调用
kernel.semmni定了系统中的信号集的个数,一般125足够用了
kernel.semmns定义了系统中最大信号数,建议值为 kernel.semmsl * kernel.semmni.
需要注意的是不要弄混信号和信号集的概念。