Semaphore parameters:
- SEMMSL is the maximum number of semaphores allowed per semaphore identifier (semaphore set).
- SEMMNS is the total number of semaphores allowed for the system.
- SEMMNU is the maximum number of semaphore undo structures allowed for the system.
Semaphore calculation requirements for OpenEdge Databases:
These parameters are guidelines.
- A particular system or application may require increasing these limits as Progress/OpenEdge is not the only application or resource on a machine that makes use of semaphores. The values required by Progress must be added to the current kernel parameter values, they do not take into account the requirement of UNIX operating system and/or any other application that use shared memory and semaphore.
- Refer to Operating Systems specific information for kernel tuning, for example:
- you need to make sure that you have NPROC >= SEMMNU + 4
- Since a semaphore set can have the maximum number of SEMMSL semaphores per semaphore set, it is often recommended to set SEMOPM equal to SEMMSL.
- there may be related changes in later versions which effect how semaphores are used by that OS, for example: Linux Database crashes when semaphores get removed
SEMMSL
- Maximum of number of users for any database on the system (-n) + number of servers for any database on the system (-Mn) + 4
- The number of semaphores within the semaphore set is determined by the -n and -Mn startup parameter for each database.
- You need to include any Progress auxiliary process in the -n count, i.e. APWs, AIW,BIW, WDOG, AIMGT, RPLS replication process, online backup, extra PROMON sessions, etc. As we plan to utilize additional auxiliary process, we need to add more to the -n values to account for them.
SEMMNS
- SEMMSL * the number of active databases
- Note additional semaphores allowed for the system wide may be required.
SEMMNU
- Set equal to one per Progress process connecting to a database. (each server process, self-service client, page writer, BI writer, AI writer, watchdog, PROSHUT, PROMON.
- However, to avoid system errors we recommend to set SEMMNU = SEMMNS. Not all systems have the SEMMNU tunable parameter.
If parameters are not set correctly, OpenEdge will display an error message when it attempts to start an additional user or server.
Example:
Semaphore limit exceeded
Less than minimum number of semaphores available (1130)
The above semaphore calculations relate to login-semaphores, when non-enterprise db licenses are used, additional semaphores are required for locking. Even with Enterprise database licenses, login semaphores are still used and less semaphores are used otherwise for locking when spin locks are enabled (-spin):
Does Progress use semaphores on multi-processor machines?