QMF has been improving performance for its TSO client with various enhancements. This blog discusses how increasing QMF’s fetch buffer size using a new QMF global variable can help to decrease I/O and improve performance.
You are watching: what is qmf
With the new global variable, DSQEC_BUFFER_SIZE, released in QMF Version 12, users can reduce data base traffic and see performance improvements in report completion activities such as BOTTOM, SAVE DATA and PRINT or EXPORT REPORT. When combined with QMF’s multirow fetch capability, significant time savings in these activities can also be realized. As everyone’s environments are different, the improvement times may vary than what is described in this blog.
Before QMF 12, QMF defined its internal fetch buffer size to a constant of 4K. This fetch buffer size has been a limiting factor in how much data can be fetched by QMF from the database at a time. With this new enhancement, the QMF fetch buffer size is adjustable from 4K to a max of 256K. This is done by setting QMF global variable DSQEC_BUFFER_SIZE to a value of 4 to 256, which corresponds to the number of kilobytes QMF allocates to the buffer size.
The default is for DSQEC_BUFFER_SIZE is 4. This was used to keep QMF executing in in its historical mode as an increase in the buffer size will use more user storage from the user’s region to generate reports. As region size limitation is of less concern than it was historically, consider making this change.
Let’s look at two examples of how this variable can improve performance:
Example 1: Multirow fetch with small row sizes
When multirow fetch is set, it allows QMF to retrieve ‘as many rows as possible’ from a single trip to the data base. ‘As many rows as possible’ is determined by the fetch buffer size and how many rows can fit into that fetch buffer size. For QMF to decrease I/O to the database, it needs to minimize the number of I/O data fetch requests to the database. As we can see in the table below, as the buffer size increases, the number of rows fetched per multirow fetch request increases, and this decreases the I/O trips to the database. In our example, with a small row size of 500, when the buffer size is increased from 4K to 12K, there is a 66% decrease in I/O fetch trips, and when the buffer size is maximized, the fetch I/O decreases by over 98%.
To help customers in determining an optimal buffer size, please read the procedure in Appendix A.
If you want to know how to find out the width of your result set, please read Appendix B.
If you want to understand in more detail how multi-row fetch works, please read Appendix C.
EXAMPLE #1: SMALL ROW SIZE
QMF Fetch Buffer size
Number of rows in result set
Number of rows fetched per database request
Number of trips to DB
Fetch I/O reduction %
==> 4K = 4096 bytes
4096/500 = 8
EXAMPLE 1 BASE Measurement
==> 12K = 12288 bytes
(750-250)/750 = .66
==> 256K =262,144 bytes