11.1.6 Tunable Message Parameters

A properly tuned system rarely fills its queues. Enough slack should be left in the queues to handle the natural variability of the message flow. No exact settings can be recommended. Tuning is very application dependent. The UNIX ipcs(1) command provides a snapshot of the queues so you can determine whether they are full. You can try setting the TPNOBLOCK flag when sending requests. If you do, clients can tell when queues are full, and they can slow down a bit. It might help to increase the scheduling priority of servers with full request queues.

The following message parameters may need to be adjusted:

MSGMNI
Number of unique message queue identifiers. Each process participating in an Oracle Tuxedo application on a particular machine typically needs at least one message queue. This number is reduced if MSSQ sets are used, which means that multiple server processes share a single queue. For transaction processing, count an additional queue per server group for transaction manager server (TMS) processes. Thus, the minimum requirement for MSGMNI can be determined by the following formula:
MSGMNI = MAXACCESSERS + 7 
+ (number of servers with REPLYQ) 
+ (number of MSSQ sets) 
- (number of servers in MSSQ sets)
MSGMAX
Maximum message size in bytes. MSGMAX must be big enough to handle any Oracle Tuxedo application running on this machine.
MSGMNB
Maximum message queue length in bytes. This number must accommodate the total size of all messages that are on a queue and have not been taken off by the associated processes. The minimum value for MSGMNB is the value of MSGMAX. Messages longer than 75% of MSGMNB are sent to a file instead of a message queue—a situation that should be avoided because it severely degrades performance.
MSGMAP
Number of entries in the control map used to manage message segments. The value of MSGMAP should be the number of message segments (specified in MSGSEG).
MSGSSZ
Size, in bytes, of a message segment. A message can consist of several such segments. The value of MSGSSZ should be such that a multiple of MSGSSZ is equal to the size (including the Oracle Tuxedo system header) of the most commonly sent message. By dividing messages into segments in this way, you can avoid wasting space.
MSGSEG
Number of message segments in the system.
MSGTQL
Total number of outstanding messages that can be stored by the kernel. This is the maximum number of unread messages at any given time.