Tuning your queue manager on IBM MQ for z/OS
There are few simple steps that you can take to ensure that your queue manager is tuned to avoid basic performance problems.
There are a number of ways in which you can improve the performance of your queue manager, which are controlled by queue manager attributes set by the ALTER QMGR command. This section contains information about how you can do this by setting the maximum number of messages allowed on the queue manager, or by performing 'housekeeping' on the queue manager. IBM® MQ SupportPac MP16 - WebSphere® MQ for z/OS® Capacity planning & tuning gives more information on performance and tuning.
Syncpoints
One of the roles of the queue manager is syncpoint control within an application. An application constructs a unit of work containing any number of MQPUT or MQGET calls terminated with an MQCMIT call.
As the number of MQPUT or MQGET calls within the scope of one MQCMIT increases, the performance cost of the commit increases significantly. Applications, in general, should be designed to not MQPUT/MQGET a large number of messages in a single synchpoint.
You can administratively limit the number of messages within any single syncpoint by using the MAXUMSGS queue manager attribute. If an application exceeds this limit it receives MQRC_SYNCPOINT_LIMIT_REACHED on the MQPUT,MQPUT1, or MQGET call which exceeds the limit. The application should then issue MQCMIT or MQBACK as appropriate.
The default value of MAXUMSGS is 10000. This value can be lowered if you want to enforce a lower limit, which can also help protect against looping applications. Before reducing MAXUMSGS make sure you understand your existing applications to ensure they do not exceed the limit, or can tolerate the MQRC_SYNCPOINT_LIMIT_REACHED return code
Expired messages
- Explicit request
- You can control which queues are scanned and when. Issue the REFRESH QMGR TYPE(EXPIRY) command, specifying the queue or queues that you want to be scanned.
- Periodic scan
- You can specify an expiry interval in the queue manager object by using the EXPRYINT attribute.
The queue manager maintains information about the expired messages on each queue, and knows at what
time a scan for expired messages is worthwhile. Each time that the EXPRYINT interval is reached, the
queue manager looks for candidate queues that are worth scanning for expired messages, and scans
only those queues that it deems to be worthwhile. It does not scan all queues. This avoids any
processor time being wasted on unnecessary scans.
Shared queues are only scanned by one queue manager in the queue sharing group. Generally, the first queue manager to restart or the first to have the EXPRYINT set performs the scan.
Note: You must set the same EXPRYINT value for all queue managers within a queue sharing group.