SEMMSL - This parameter determines the maximum number of semaphores that can be assigned to a semaphore set.
The parameter should be equal or greater to the value of the PROCESSES initialization parameter to limit
the number of semaphores sets for a specific instance. If running multiple instances on one server this parameter should
be set to the greatest PROCESSES parameter of all instances. Each process in an instance corresponds to one semaphore
in unix so when the instance is started the number semaphores are allocated based on the PROCESS parameter and the number
of semaphore sets based on PROCESSES divided by SEMMSL.
1. PROCESS parm in init.ora set to 200
SEMMSL set to 100
The result will be 2 semaphore sets of 100 semaphores.
If you issue an oradebug ipc in svrmgrl you will get:
Shared memory information written to trace file.
-------------------- Semaphores --------------------
Total number of semaphores = 200
Number of semaphores per set = 100
Number of semaphore sets = 2
If you issue an ipcs in unix (this displays the id of the semaphore sets):
IPC status from as of Wed Jul 28 09:25:01 1999
Message Queue facility not in system.
T ID KEY MODE OWNER GROUP
m 0 0x5000015b --rw-r--r-- root root
m 2802 0xdab585cc --rw-r----- oracle dba
s 524304 00000000 --ra-r----- oracle dba
s 11101 00000000 --ra-r----- oracle dba
Changing the SEMMSL to 200 in the above example would reduce the number of semaphore sets to 1.
SEMMNI - Maximum number of semaphores set id's that can be allocated on the server at any given time.
1. 6 instances defined as:
In this case it would be impossible to bring up all instances at the same since 2 sets of semaphores (PROCESS/SEMMSL=2)
for each instance will be allocated. To fix the problem in this case you would need to increase SEMMNI to a value
greater than 12.
SEMMNS - Maximum number of semaphores that can be allocated on the server at any given time.