Need some expert advice on BMC unload execution time reduction:
Have a scenario where I need to change IMS key fields(data not definition). I am using BMC unload utility with an UserExit; where key data is changed. After successful unload with correction, I reload data back. I am able to accomplish on smaller databases.
However for larger databases (approx. 10 million record size), while unloading (with UserExit) the job ran more than 16 hours thrice before I cancelled it. DBA and I tried various options to reduce the execution time but no luck. Options we tried:
- Changed DFSVSAMP parameters (increased IOBF )
- Job class and Region parameter.
- Changed UserExit default BUFSPACE(20) to BUFSPACE(400)
- Few more setting based on BMC recommendation - DFSURGU1(SHORT), EXPAND(NO) ,LPCK(NO)
I'm asking because of a problem I had MAAAANNNNYYYY years ago doing something similar. (right after 9/11)
In my case, we neglected to make the exit routine program resident. So each segment passed to it would re-load the damn thing. It was taking forever too.
Here are the highlights from the compile JCL I made to make this work. It was COBOL II, and I'm certain there is a better way.
I had to rebuild the IGZEOPT module with reentrant/reuse (or something like that)
This angered me that I couldn't remember...so I went hunting!
I found the SCLM hooks that are in use with Enterprise COBOL
Code:
Member WTSO.XXXX.SOURCE(CEEUOPT) has:
CEEUOPT CSECT
CEEUOPT AMODE ANY
CEEUOPT RMODE ANY
CEEXOPT RTEREUS=(ON),
TRAP=(OFF)
END
Assembled into
WTSO.XXXX.LOAD(CEEUOPT)
The SCLM language macro for the Link Edit has:
BMCLE370 FLMSYSLB WTSO.XXXX.LOAD
*
FLMLANGL LANG=BMCLE370,CANEDIT=N,VERSION=L370V1.0
FLMTRNSL CALLNAM='BMCLKED/370',
FUNCTN=BUILD,
COMPILE=HEWL,
VERSION=F64,
GOODRC=4,
PORDER=3,
OPTIONS=(MAP,XREF,LIST,SIZE=(256K,48K),LET,REUS)
The SCLM language parser (Compile) has:
FLMTRNSL CALLNAM='BMCEXIT',
FUNCTN=BUILD,
DSNAME=SYS1.SIGYCOMP,
COMPILE=IGYCRCTL,
VERSION=1.0,
GOODRC=4,
PORDER=3,
OPTIONS=(APOST,C,DATA(31),NODYN,LIB,NORENT,XREF,
OFF,MAP,NUMPROC(PFD),NOCMPR2,FLAG(I,W),
NOADV,TEST(NONE,SYM),LANGUAGE(EN),SEQ,BUF(32760))
I also realized that we have a vestigial line of code in all of our exits. At the start of the Procedure Division:
IF (FIRST-TIME-SWITCH EQUAL SPACES)
MOVE HIGH-VALUES TO FIRST-TIME-SWITCH
DISPLAY 'START DB LOAD'
This was added by me to show that the program only loaded once. You could add something similar to prove you have it working.
If it's not, you see that display statement for every input segment.
Ed Goodman :
- UserExit gets called, I did check with display statement including DISPLAY 'START DB LOAD' . Had to remove displays because of additional overhead and to avoid operations team questions.
- Unload without userexit completes in 60 sec in prod and in 80 seconds in test (approx).
- You may be spot on with program not being resident. I will check on this.
dick scherrer:
I don't see multiple volumes but one in job log. I will check with storage support to confirm.
Ed Goodman and dick scherrer:
I debugged the unload step (userexit), and it does get loaded every time segment is passed on to it. Will compile with these parameters now:
Like I said, this was 11 years ago. BMC may have changed something by now. I just remember that they couldn't help us then, and that the instructions/hints to change the compile were in the BMC manual.
Mansab, just changing the compile will NOT work. You also have to work with the link editor. The item you asked me to elaborate on is about changing the options that get used during link-edit.
If you are on Enterprise COBOL, you'll want to use what's in my second post dealing with the CEE version.
From my current BMC manual:
You may receive positive results by using NORENT and NODYNAM as compile options.
When using a COBOL/370 exit with the Unload function or the Reload function, you
may need to assemble an application-specific copy of module CEEUOPT with
RTEREUS(ON) and TRAP=OFF. If your current LE/370 run-time keywords module
specifies RTEREUS(OFF) and TRAP=ON, you can assemble a CEEUOPT module with
RTEREUS(ON) and TRAP=OFF to another library and INCLUDE it in the link-edit of your
user exit. The CEEUOPT module must be assembled with AMODE(31). For details
about the LE environment, see the IBM Language Environment manuals.