The CBS index is used to build temporary indexes. It is also used to hold sets spilled from the CBS buffer when the CBS buffer fills.
The index can fill for a number of reasons:
- The index size is insufficient for the number temporary indexes needed at any one time.
- There are too many CBS sets spilling into the index and filling it up.
Run DBSQLPR with these commands to see if there are any set spills and to obtain other CBS statistics:
SELECT * FROM SYSADM.MUF_CBS ;
If there are no set spills (SETS_SPILLED = 0) then the size of the CBS index is too small and needs to be increased.
If there are many set spills (SETS_SPILLED > 0) it could be the CBS buffer size is too small, increase it by changing the second parameter of CBS MUF startup option.
Excessive set spills can also be caused by a program creating lots of CBS sets but not issuing a SELPR command to delete them.
If SETS_DEL_MAX_AGE and/or SETS_FETCHED are greater than 0 this can also indicate a missing SELPR.
Sets not released via SELPR get deleted based on the MAXAGE parameter specified in the CBS startup option, but this happens only when they are still in the CBS buffer when they reach that age. The sets that have been spilled to the IXX only get released when the job ends or the last CLOSE is received.
For online CICS programs sets are only released from the IXX when you disconnect/reconnect CICS from the MUF, use these commands to release them:
When the problem happens run DBSQLPR with the following SQL command a few times to list the 10 oldest CBS sets:
SELECT * FROM SYSADM.MUF_CBS_OLD_SETS ;
Normally the program name is put into the first 8 bytes of the UIB (User Information Block) by the application program.
This may help to identify the program not issuing a SELPR command.