+

Search Tips | Advanced Search

Buffer manager data records

Use this topic as a reference for the format of buffer manager data records.

The format of the buffer manager statistics record is described in assembler macro thlqual.SCSQMACS(CSQDQPST).

Note: Buffer manager statistics records will only be created for buffer pools that are defined. If a buffer pool is defined but not used then no values will be set and its buffer manager statistics record will not contain any data.

For information about efficiently managing your buffer pools, see Manage your buffer pools.

When interpreting the statistics, we are recommended to consider the following factors because the values of these fields can be used to improve the performance of our system:
  1. If QPSTSOS, QPSTDMC, or QPSTIMW is greater than zero, we should either increase the size of the buffer pool or reallocate the page sets to different buffer pools.

    • QPSTSOS is the number of times that there were no buffers available for page get requests. If QPSTSOS ever becomes nonzero, it shows that IBM MQ is under severe stress. The buffer pool size should be increased. If increasing the buffer pool size does not make the value of QPSTSOS zero, there might be I/O contention on the DASD page sets.
    • QPSTDMC is the number of updates that were performed synchronously because there was either more than 95% of the pages in the buffer pool waiting for write I/O, or there was less than 5% of the buffer pool available for read requests. If this number is not zero, the buffer pool might be too small and should be enlarged. If increasing the buffer pool size does not reduce QPSTDMC to zero, there might be I/O contention on the DASD page sets.
    • QPSTIMW is a count of the number of times pages were written out synchronously. If QPSTDMC is zero, QPSTIMW is the number of times pages were found on the queue waiting for write I/O that had been there for at least two checkpoints.

  2. For buffer pool zero and buffer pools that contain short-lived messages:

    • QPSTDWT should be zero, and the percentage QPSTCBSL/QPSTNBUF should be greater than 15%.

      QPSTDWT is the number of times the asynchronous write processor was started because there was either more than 85% of the pages in the buffer pool waiting for write I/O, or there was less than 15% of the buffer pool available for read requests. Increasing the buffer pool size should reduce this value. If it does not, the pattern of access is one of long delays between puts and gets.

    • QPSTTPW might be greater than zero due to checkpointing activity.
    • QPSTRIO should be zero unless messages are being read from a page set after the queue manager is restarted.

      The ratio of QPSTRIO to QPSTGETP shows the efficiency of page retrieval within the buffer pool. Increasing the buffer pool size should decrease this ratio and, therefore, increase the page retrieval efficiency. If this does not happen, it indicates that pages are not being frequently reaccessed. This implies a transaction pattern where there is a long delay between messages being put and then later retrieved.

      The ratio of QPSTGETN to QPSTGETP indicates the number of times an empty page, as opposed to a non-empty page, has been requested. This ratio is more an indication of transaction pattern, than a value that can be used to tune the system.

    • If QPSTSTL has a value greater than zero, this indicates that pages that have not been used before are now being used. This might be caused by an increased message rate, messages not being processed as fast as they were previously (leading to a buildup of messages), or larger messages being used.

      QPSTSTL is a count of the number of times a page access request did not find the page already in the buffer pool. Again, the lower the ratio of QPSTSTL to (QPSTGETP + QPSTGETN) is, the higher the page retrieval efficiency. Increasing the buffer pool size should decrease this ratio but, if it does not, it is an indication that there are long delays between puts and gets.

    • You are recommended to have sufficient buffers to handle your peak message rate.

  3. For buffer pools with long-lived messages, where there are more messages than can fit into the buffer pool:

    • (QPSTRIO+QPSTWIO)/Statistics interval is the I/O rate to page sets. If this value is high, you should consider using multiple page sets on different volumes to allow I/O to be carried out in parallel.
    • Over the period of time that the messages are processed (for example, if messages are written to a queue during the day and processed overnight) the number of read I/Os (QPSTRIO) should be approximately the total number of pages written (QPSTTPW). This shows that one page is read for every page written.

      If QPSTRIO is much larger than QPSTTPW, this shows that pages are being read in multiple times. This might be a result of the application using MQGET by MsgId or CorrelId when the queue is not indexed, or browsing messages on the queue using get next.

      The following actions might relieve this problem:
      1. Increase the size of the buffer pool so that there are enough pages to hold the queue, in addition to any changed pages.
      2. Use the INDXTYPE queue attribute, which allows a queue to be indexed by MsgId or CorrelId and eliminates the need for a sequential scan of the queue.
      3. Change the design of the application to eliminate the use of MQGET with MsgId or CorrelId, or the get next with browse option. Note: Applications using long-lived messages typically process the first available message and do not use MQGET with MsgId or CorrelId, and they might browse only the first available message.
      4. Move page sets to a different buffer pool to reduce contention between messages from different applications.

Parent topic: Interpreting IBM MQ for z/OS performance statistics

Last updated: 2020-10-04