Batch/IMS Performance Degradation with Dynamic Calls to tableBASE

If tableBASE is called dynamically without a TBPARM and tableBASE modules are loaded in protected storage (loaded from LPA or an authorized library), there may be significant performance degradation. Performance degradation can also occur with a TBPARM if it is reinitialized before every call.

When tableBASE modules are loaded from an authorized library or LPA when a newly tested application is moved into production after being tested using tableBASE STEPLIBs, the application may experience performance degradation. The performance testing of an application should occur in the same environment as the production environment.

Batch, IMS and DB2 stored procedures accessing tableBASE may use excessive CPU time if tableBASE modules are in an authorized library or LPA and calls to tableBASE do not use a TBPARM parameter.

Single TBPARM per thread

A single TBPARM should be used per thread (for batch, this generally means just one; for IMS, one per transaction; for DB2 SP, one per SP). To be effective, it must be initialized at the first call to tableBASE and never re-initialized.

When tableBASE calls are issued with a TBPARM operand, our fast path “handle” is stored in the TBPARM area. If no TBPARM is used, tableBASE attempts to achieve similar performance by updating both DK1TCALL and DK1TROTB at initialization of tableBASE in the region. This will not be possible when these modules are in key 0 storage.

Re-entrant modules will be loaded into key 0 storage when they are loaded from LPA or from an authorized library.

If you are going to load tableBASE modules from LPA or an APF-authorized library AND you have applications which do not use a TB-PARM, then we recommend you relink DK1TCALL and DK1TROTB as serially reusable.

Relink control statements for DK1TROTB:
 ORDER DK1T1153
 INCLUDE loadlib(DK1TROTB)
 MODE AMODE(31),RMODE(ANY)
 SETOPT PARM(REUS=SERIAL)
 ENTRY DK1T1153
 NAME DK1TROTB(R)
/*
Relink control statements for DK1TCALL:
 INCLUDE loadlib(DK1TCALL)
 MODE    AMODE(ANY),RMODE(24) <<--- USE IF RMODE(24) APPS EXIST
*MODE    AMODE(31),RMODE(ANY) <<--- COULD USE IF NO MORE AMODE(24) APPS
 SETOPT  PARM(REUS=SERIAL)
 ENTRY   TBLBASE
 ALIAS   TBLBASE
 ALIAS   TBASE,TBBAFN01,TBCALL,MAINCALL
 ALIAS   TBCALLC,MAINROOT,TBASEC
 ALIAS   TBCALLI,TBROOTI
 ALIAS   TBASEV,TBCALLV
 ALIAS   TBROOT
 NAME    DK1TCALL(R)
/*