FLAM-ims

FLAM is a method for context-free data compression. No pre-analyses of the data and no structure descriptions are required. The procedures used in FLAM-ims use the same approach.

With FLAM-ims, segments of an IMS database are compressed before writing and decompressed after reading. During compression, an checksum is calculated. The decompressed data is verified according to this checksum.

With FLAM-ims, segments can be compressed from 30% to 60% of their original size. This saves disk space and, in batch processes, I/O time and thus processing time. Without taking parallel processes into account, the processing time is reduced to about 50% of the time needed without FLAM-ims.

FLAM-ims has tamper protection. Each compressed record contains control elements that enable data to be recovered without doubt or that detect and indicate data falsification. This also applies to those records whose compression is not worthwhile.

No program changes are necessary for the use of FLAM-ims. The exit provided by IBM is used.

Requirement for the use of FLAM-ims

The exit provided by IBM for editing and compressing segments is used for compressing the database segments. The restrictions specified by IBM also apply. The exit is described in the IMS System Programming Reference Manual.

Segment types can be compressed with the access methods HDAM and HIDAM, combined with VSAM or OSAM. Segments that are described as logical children or that are in IMS/VS FAST PATH access cannot be compressed.

IBM provides 2 options for compression, with and without a key. When compressing with a key, the whole segment is compressed, without a key only the data part after the key is compressed. For faster search processes, compression without key is recommended. When compressing with a key, the segment must be decompressed before each check. For searches in dialogue, this version results in very long response times.

In FLAM-ims, only compression of the segments without key is used, because it uses the standard IMS EXIT. FLAM-ims is therefore compatible with all data dictionaries.

In the DBD (Data Base Description), the definition for compression must be entered for all segment types to be compressed. Further changes to existing database descriptions, such as the PSB (Program Specification Block), are not necessary.

FLAM-ims programs must be located as loadable modules either in the IMS library IMSVS.RESLIB or in another load library which is mapped to IMSVS.RESLIB. In the second case, the IMSVS.RESLIB must be authorised with DFSRESLB.

It should be noted that short segments cannot be optimally compressed. Depending on the character string, expansions are also possible with such segments. The minimum segment length used for compression is 24 bytes.

If a segment becomes longer during compression, a disguised original (manipulation protection) is written (no addtional CPU costs at decompression).

Usage of FLAM-ims

The FLAM-ims product contains several programs:

FLIMSORG
is used when unloading an uncompressed database. In the process, statistics on the compression of the individual segments to be expected with FLAM-ims are logged. However, the data remains uncompressed! This module is used for simple testing of the efficiency of compression with FLAM-ims without actually using compression.
FLIMSTAT
can be called when a compressed database is unloaded or loaded. FLIMSTAT checks the compression efficiency of the individual segment types of the database. Statistics are logged for each segment type (analogous to FLIMSORG). The data is decompressed during unloading (i.e. the sequential unload is uncompressed) and compressed during loading. This version is not reentrant and should not be used in online mode.
FLAMIMS
is reentrant and is used for normal processing. IMS records are compressed when written and decompressed when read. Statistics are not created.

In order to compress segments of a database with the production version FLAMIMS, only the segment definition in the DBD (Data Base Description) has to be extended with the entry

,COMPRTN=(FLAMIMS,DATA)

(the entry DATA can also be omitted).

To check the efficiency, the entry

,COMPRTN=(FLIMSTAT,DATA,INIT)

or

,COMPRTN=(FLIMSORG,DATA,INIT)

is required. Via INIT, the counters for the statistics in the data area are set to 0 in an initialization routine in this version, and the statistics are written to a file via the DD name FLPRINT in an end routine. This file is already opened during INIT.

This statistics provides per segment in intervals of 5% the dispersion of the data records after their compression by FLAMIMS, whereby the percentage is based on the remainder in relation to the maximum or fixed record length according to the DBD segment definition.

Changes in programs and the JCL are not necessary.

Via the exit for editing and compressing the segments, FLAMIMS is called by IMS each time a segment for which compression was specified in the DBD is read or written. This call is made in user programs and in utilities.

FLAM-ims' overhead procedure

The use of variable long segments can lead to an overload of the overflow areas in case of length changes of updates, even if one does not work with compressed data.

FLAM-ims offers various overhead procedures with which one can create a space reserve. This means: a compressed set is supplemented by a variable part.

FLAM-ims generates comprehensive statistics in an unload or reload run, with the help of which the user can decide on one of the 4 overhead procedures (see description of module FLIMSTAT).

FLAM-ims distinguishes 3 parameters: MIN, MAX and REL. REL defines a percentage overhead on the compressed data; MIN and MAX limit this overhead to fixed lengths. If one or more of these parameters are set to zero, only the others (with non-zero values) are evaluated.

FLAM-ims takes the instructions for the overhead procedure from the USER DATA AREA of the relevant segment.

This USER DATA AREA is set up after successful DBD generation by the Linkage Editor's Replace function for CSECT'S with the parameters specified by the user (see example Use of FLAM-ims overhead procedures).

There are the following 4 overhead procedures:

Procedure 4
MIN=0, MAX=0 and REL=Z
Each compress is extended by Z%, to a maximum of the original length.
Procedure 8
MIN=0, MAX=Y and REL=Z
Each compressed file is expanded by Z%, to a maximum of length Y.
Method 12
MIN=X, MAX=Y and REL=Z
Each compressed file is extended by Z%, at least to the length X. If the compressed data itself is already longer than X, it is extended (at most) to the length Y.
Method 16
MIN=X, MAX=Y and REL=0
Each compressed file is extended to at least the length X. If the compressed data itself is already longer than X, it is extended (at most) to length Y.

The following applies to all procedures: If the compressed file is already longer than Y, no extension takes place. The default value for MAX is the length before compression.

The dispersion of the segment lengths after compression gives clues as to how the parameters MIN and MAX as well as REL should be set. As a rule, one looks for suitable accumulation points for this.

Conversion to compressed data

The initial compression of a database is done when it is created or reorganized. In the case of a new database to be created, the compression is entered in the DBD and the database is loaded with a utility or user program.

When using the standard IMS/VS EXIT, IBM provides a reserve of 10 bytes for fixed segments. It is recommended that this 10 byte reserve is also taken into account for variable segments in the DBD.

The following work is required for a reorganization:

  1. Without the use of statistics:
    • With the unload utility and the unchanged DBD, the database is unloaded.
    • In the DBD, the entry for compression with FLAMIMS is added to all segment types that are to be compressed, and the DBD is reassembled.
    • The database is loaded with the reload utility and the new DBD.
  2. With the use of a statistics:
    • In the DBD, the entry for compression with FLIMSORG is added to all segment types that are to be compressed, the DBD is reassembled.
    • The database is unloaded with the unload utility and the modified DBD and the statistics are created.
    • In the modified DBD, the entries for FLIMSORG are changed to FLAMIMS or FLIMSTAT, the DBD is reassembled.
    • The database is loaded with the reload utility and the new DBD. If FLIMSTAT is used, statistics are generated.

If no overhead procedure for FLAM-ims is used between the unloading and loading of the database, the statistics when loading the DB are identical to those when unloading.

The unload and reload utilities are:

HDAM/HIDAM Unload - DFSURGU0
HDAM/HIDAM Reload - DFSURGL0

These utilities are to be used as prescribed by IBM.

Reorganization of compressed databases

The reorganization of a database can be done with the valid DBD with entry of compression. Here, each segment is decompressed and compressed again.

The sequential unload is thus always uncompressed!

Much less time is required for the reorganization if the database is unloaded and reloaded in compressed form with a modified DBD. In this case, IMS is briefly set so that the compression is no longer known and all segments contain records of variable length.

The following changes are necessary in the DBD (see also example below):

  1. no definition of compression
  2. for segments of fixed length
    • define record format variable
    • max. record length = record length + 10
    • min. record length = key length + 2
    • key position = key position + 2.

When assembling the DBD, a recommendation is given for the control interval size of VSAM files. With this size, the clusters of the database should be set up again with the IDCAMS.

Unloading and loading of the database is performed with this DBD modified in this way, then the DBD with the compression is reinserted.

The sequential unload is compressed!

As a result, the reorganization run takes much less time (fewer I/Os) and requires less storage space on the disk.

In addition, an archiving run of these stocks has less data to save and is thus finished faster with likewise less storage requirements on tape.

Messages

The modules FLIMSTAT and FLIMSORG write statistical data per compressed segment type into a sequential file (DD name FLPRINT) during loading/ unloading of the database. This file is opened during the first call (INIT).

The statistics contain the following information:

F L A M   (R)   I M S   D A T A   C O M P R E S S I O N   A N A L Y S I S
Copyright (C)   by limes datentechnik gmbh

Name of Segment:        SEG1

                                         Prfx   AVG    AVG    Total
  No.        Def    Max    Min    AVG    +      Data   Pad    Segment
  Records    Len        Len       Len    Key    Len    Len    Length
+--------+------+------+------+------+------+------+------+----------+
       50     96     96     96     96      6     90             4,800  Orig.
                     86     33     73      8     65      0      3,644  Comp.
                                                  Total Saved   1,156

Average Data Compression      27.8%

Total Segment Reduction       24.1%

Procentual Distribution of Records by Procentual Def. Record Length
                                                (100% = Def. Length)

 <15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90 >90% Def Len
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                   2          22                          38  38    % Records

Name of Segment:        SEG2

                                         Prfx   AVG    AVG    Total
  No.        Def    Max    Min    AVG    +      Data   Pad    Segment
  Records    Len        Len       Len    Key    Len    Len    Length
+--------+------+------+------+------+------+------+------+----------+
       52    609    609     90    478      4    474            24,853  Orig.
                    395     33    300      4    296      0     15,614  Comp.
                                                  Total Saved   9,239

Average Data Compression      37.6%

Total Segment Reduction       37.2%

Procentual Distribution of Records by Procentual Def. Record Length
                                                (100% = Def. Length)

 <15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90 >90% Def Len
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
   2     25        2               4  15  52                        % Records

Name of Segment:        SEG3

                                         Prfx   AVG    AVG    Total
  No.        Def    Max    Min    AVG    +      Data   Pad    Segment
  Records    Len        Len       Len    Key    Len    Len    Length
+--------+------+------+------+------+------+------+------+----------+
       94    104    104    104    104      6     98             9,776  Orig.
                    101     38     71      8     63      0      6,673  Comp.
                                                  Total Saved   3,103

Average Data Compression      25.8%

Total Segment Reduction       31.8%

Procentual Distribution of Records by Procentual Def. Record Length
                                                (100% = Def. Length)

 <15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90 >90% Def Len
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                       2       1  28   9  10  11  11   4  10   1  15% Records

Name of Segment:        SEG4

                                         Prfx   AVG    AVG    Total
  No.        Def    Max    Min    AVG    +      Data   Pad    Segment
  Records    Len        Len       Len    Key    Len    Len    Length
+--------+------+------+------+------+------+------+------+----------+
       47    153    153      6     75      2     73             3,527  Orig.
                    120      7     61      2     59      0      2,868  Comp.
                                                  Total Saved     659

Average Data Compression      19.2%

Total Segment Reduction       18.7%

Procentual Distribution of Records by Procentual Def. Record Length
                                                (100% = Def. Length)

 <15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90 >90% Def Len
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
   9   2  13      36   4          15      11          11            % Records

                     S U M M A R Y   D E S C R I P T I O N
                               FOR DBD TESTFLAM

                                Original                 Compressed
                   Def ! AVG  Pfx  AVG  Total   ! AVG  AVG  AVG  AVG  Total   !
 Segment  Records  Rec ! Rec  +    DTA  Segment ! Rec  DTA  DTA  Pad  Segment !
                   Len ! Len  Key  Len  Length  ! Len  Len   %   Len  Length  !
+------+---------+-----+----+----+----+---------+----+----+----+----+---------+
 SEG1          50    96   96    6   90     4,800   73   65   28    0     3,644
 SEG2          52   609  478    4  474    24,853  300  296   38    0    15,614
 SEG3          94   104  104    6   98     9,776   71   63   36    0     6,673
 SEG4          47   153   75    2   73     3,527   61   59   19    0     2,868
                                          ------                        ------
                                          42,956                        28,799

Total Data Base Reduction       33.0%      14,157 Bytes

Expansions can occur in segments with a very short data part (smaller than 24 bytes). With segments up to approx. 50 bytes long, expansions only occur in rare cases with character strings that are very unfavorable for compression. With longer segments, expansions can be excluded.

If a segment becomes longer during compression, a disguised original (tamper protection) is written.

FLAM-ims is regularly adapted to the IMS EXIT standard in such a way that no compatibility problems can occur if one proceeds as prescribed (see chapter 'Installation of FLAM-ims') after each service level change, i.e. reassembled and linked.

Error messages

If errors occur during decompression, the cause is a change in the bit string to be decompressed which FLAM-ims cannot foresee, e.g. I/O error, external manipulation.

If errors are detected during the compression of segments, the segment is transferred uncompressed but obfuscated with checksum. During decompression, the segment is recognized as uncompressed and transferred unobfuscated.

The following ABEND FLAMIMS: messages can be issued on the console (they are also logged in the JCL listing):

KEY COMPRESS ERROR RC=108
The specified segment of the database has been generated with key compression.
FUNCTION CODE ERROR RC=nnn
FLAMIMS received a not allowed function code (nnn) during the call.
DECOMPRESSION ERROR RC=nnn
RC=004 FLAMIMS has detected a data manipulation with all these
RC=008 return codes.
RC=012
RC=016
RC=020
RC=024
RC=028
RC=124
DECOMPRESSION ERROR RC=104
FLAMIMS does not recognize the input record as compressed. Possibly there is an uncompressed segment.
DECOMPRESSION ERROR RC=130
FLAMIMS was called from such a deep nesting level that no memory is available.

In addition to these error messages, the following additional information appears:

SEGMENT: name (segment name)
DBD ...: name (DBD name)
KEY ...: key (key-information for segments with key)
COMPR. : nnnnnn nn (start of the comprimate for segments without key)
EXPAND : nnnnnnnn nn (beginning of decomprimates for segments without key)

BUT NO MEMORY FOR MESSAGE IN DETAIL
FLAMIMS has detected one of the errors listed above. There is not enough memory available when requesting memory for the error message.

At the end of these error messages a dump is generated and the IMS-CONTROL-REGION exits to IMS-USER-ABEND 4000. Or (flag in DBD-CSECT) FLAMIMS returns only a return code and ABEND code 840.

Examples

Original database unload without statistics

The database is unloaded as usual, statistics for compression are not created. The corresponding DBD specification is e.g.:

*   DBD for TESTDATABASE without FLAMIMS
*
*  
*
        DBD     NAME=TESTFLAM,ACCESS=HDAM,            *
                RMNAME=(TRANDOM,8,63638,100)
        DATASET DD1=DATASET1,DEVICE=3350,SCAN=0
*
        SEGM    NAME=SEG1,PARENT=0,BYTES=96,PTR=T
        FIELD   NAME=(S1F1,SEQ,U),BYTES=6,START=1     *
                TYPE=X
        FIELD   NAME=S1F2,Bytes=1,START=7,TYPE=X
        FIELD   NAME=S1F3,Bytes=1,START=8,TYPE=X
*
        SEGM    NAME=SEG2,PARENT=SEG1,                *
                BYTES=(609,7),PTR=T
        FIELD   NAME=(S2F1,SEQ,U),BYTES=2,            *
                START=3,TYPE=P
*
        SEGM    NAME=SEG3,PARENT=SEG1,                *
                BYTES=104,PTR=T
        FIELD   NAME=(S3F1,SEQ,U),BYTES=6,            *
                START=1,TYPE=X
        FIELD   NAME=S3F2,Bytes=2,START=1,TYPE=P
        FIELD   NAME=S3F3,Bytes=2,START=3,TYPE=P
        FIELD   NAME=S3F4,Bytes=2,START=5,TYPE=P
        FIELD   NAME=S3F5,Bytes=1,START=7,TYPE=X
        FIELD   NAME=S3F6,Bytes=1,START=8,TYPE=X
        FIELD   NAME=S3F7,Bytes=1,START=20,TYPE=X
        FIELD   NAME=S3F8,Bytes=1,START=76,TYPE=X
*
        SEGM    NAME=SEG4,PARENT=SEG3                 *
                BYTES=(153,5),PTR=T

With this DBD and the utility DFSURGU0 the database is unloaded. The JCL details are e.g.:

//ANWULOAD    JOB ...
//STEP      EXEC PGM=DFSRRC00,
//               PARM='ULU,DFSURGU0,TESTFLAM',
//               REGION=1024K
//STEPLIB     DD DSN=IMSVS.RESLIB,DISP=SHR
//            DD DSN=ANW.USERLIB,DISP=SHR
//DFSRESLIB   DD DSN=IMSVS.RESLIB,DISP=SHR
//IMS         DD DSN=ANW.DBDLIB,DISP=SHR
//SYSPRINT    DD SYSOUT=*
//SYSUDUMP    DD DUMMY
//DFSURGU1    DD DSN=ANW.HDUNL.TESTFLAM,
//               DISP=(NEW,CATLG,DELETE),
//               UNIT=CTAPE,LABEL=RETPD=0001
//DFSVSAMP    DD DSN=DBA.IMS.PARMLIB(DFSVSM01),
//               DISP=SHR
//TESTFLAM    DD DSN=ANW.DATABASE.TESTFLAM,
//               DISP=SHR

Original database unload with statistics

To do this, the compression module FLORGDB must be switched on in the corresponding DBD (without actually compressing):

*   DBD for TESTDATABASE with FLORGDB
*
*   for unloading without compression with statistics
*
        DBD     NAME=TESTFLAM,ACCESS=HDAM,            *
                RMNAME=(TRANDOM,8,63638,100)
        DATASET DD1=DATASET1,DEVICE=3350,SCAN=0
*
        SEGM    NAME=SEG1,PARENT=0,BYTES=96,PTR=T,    *
                COMPRTN=(FLORGDB,DATA,INIT)
        FIELD   NAME=(S1F1,SEQ,U),BYTES=6,            *
                START=1,TYPE=X
        FIELD   NAME=S1F2,Bytes=1,START=7,TYPE=X
        FIELD   NAME=S1F3,Bytes=1,START=8,TYPE=X
*
        SEGM    NAME=SEG2,PARENT=SEG1,                *
                BYTES=(609,7),PTR=T,                  *
                COMPRTN=(FLORGDB,DATA,INIT)
        FIELD   NAME=(S2F1,SEQ,U),BYTES=2,            *
                START=3,TYPE=P
*
        SEGM    NAME=SEG3,PARENT=SEG1,                *
                BYTES=104,PTR=T,                      *
                COMPRTN=(FLORGDB,DATA,INIT)
        FIELD   NAME=(S3F1,SEQ,U),BYTES=6,            *
                START=1,TYPE=X
        FIELD   NAME=S3F2,Bytes=2,START=1,TYPE=P
        FIELD   NAME=S3F3,Bytes=2,START=3,TYPE=P
        FIELD   NAME=S3F4,Bytes=2,START=5,TYPE=P
        FIELD   NAME=S3F5,Bytes=1,START=7,TYPE=X
        FIELD   NAME=S3F6,Bytes=1,START=8,TYPE=X
        FIELD   NAME=S3F7,Bytes=1,START=20,TYPE=X
        FIELD   NAME=S3F8,Bytes=1,START=76,TYPE=X
*
        SEGM    NAME=SEG4,PARENT=SEG3                 *
                BYTES=(153,5),PTR=T,                  *
                COMPRTN=(FLORGDB,DATA,INIT)

The JCL in the previous example is supplemented with the log file entry:

//FLPRINT DD SYSOUT=*

If the FLAM-ims modules are not stored in the RESLIB, the library must be concatenated with the RESLIB:

//STEPLIB DD DSN=IMSVS.RESLIB,DISP=SHR
// DD DSN=FLAM.IMSLOAD,DISP=SHR

UNLOAD/RELOAD with compression and statistics

For this, the compression module FLIMSTA must be switched on in the corresponding DBD.

During unload, all data records are decompressed, so the unloaded data is in the uncompressed (original) state.

During reload, the uncompressed unloaded stock is written into the database in compressed form.

In both cases, statistics on the efficiency of the compression are output for the respective segments.

FLIMSTA requires a compressed database:

*   DBD for TESTDATABASE with FLIMSTA
*
*   for loading/unloading with compression and statistics
*
        DBD     NAME=TESTFLAM,ACCESS=HDAM,            *
                RMNAME=(TRANDOM,8,63638,100)
        DATASET DD1=DATASET1,DEVICE=3350,SCAN=0
*
        SEGM    NAME=SEG1,PARENT=0,BYTES=96,PTR=T,    *
                COMPRTN=(FLIMSTA,DATA,INIT)
        FIELD   NAME=(S1F1,SEQ,U),BYTES=6,            *
                START=1,TYPE=X
        FIELD   NAME=S1F2,Bytes=1,START=7,TYPE=X
        FIELD   NAME=S1F3,Bytes=1,START=8,TYPE=X
*
        SEGM    NAME=SEG2,PARENT=SEG1,                *
                BYTES=(609,7),PTR=T,                  *
                COMPRTN=(FLIMSTA,DATA,INIT)
        FIELD   NAME=(S2F1,SEQ,U),BYTES=2,            *
                START=3,TYPE=P
*
        SEGM    NAME=SEG3,PARENT=SEG1,                *
                BYTES=104,PTR=T,                      *
                COMPRTN=(FLIMSTA,DATA,INIT)
        FIELD   NAME=(S3F1,SEQ,U),BYTES=6,            *
                START=1,TYPE=X
        FIELD   NAME=S3F2,Bytes=2,START=1,TYPE=P
        FIELD   NAME=S3F3,Bytes=2,START=3,TYPE=P
        FIELD   NAME=S3F4,Bytes=2,START=5,TYPE=P
        FIELD   NAME=S3F5,Bytes=1,START=7,TYPE=X
        FIELD   NAME=S3F6,Bytes=1,START=8,TYPE=X
        FIELD   NAME=S3F7,Bytes=1,START=20,TYPE=X
        FIELD   NAME=S3F8,Bytes=1,START=76,TYPE=X
*
        SEGM    NAME=SEG4,PARENT=SEG3                 *
                BYTES=(153,5),PTR=T,                  *
                COMPRTN=(FLIMSTA,DATA,INIT)

With this DBD and the utility DFSURGL0 the database is loaded. The JCL specifications are e.g.:

//ANWRLOAD    JOB ...
//STEP      EXEC PGM=DFSRRC00,
//               PARM='ULU,DFSURGL0,TESTFLAM',
//               REGION=1024K
//STEPLIB     DD DSN=IMSVS.RESLIB,DISP=SHR
//            DD DSN=ANW.USERLIB,DISP=SHR
//            DD DSN=FLAM.IMSLOAD,DISP=SHR
//DFSRESLIB   DD DSN=IMSVS.RESLIB,DISP=SHR
//IMS         DD DSN=ANW.DBDLIB,DISP=SHR
//SYSPRINT    DD SYSOUT=*
//SYSUDUMP    DD DUMMY
//DFSUINPT    DD DSN=ANW.HDUNL.TESTFLAM,
//               DISP=SHR,UNIT=CTAPE,VOL=SER=111111
//DFSURWF1    DD DUMMY,
//               DCB=(RECFM=VB,LRECL=900,BLKSIZE=1008)
//DFSVSAMP    DD DSN=DBA.IMS.PARMLIB(DFSVSM01),
//               DISP=SHR
//DFSURCDS    DD DUMMY
//TESTFLAM    DD DSN=ANW.DATABASE.TESTFLAM,
//               DCB=(DSORG=PS),
//               UNIT=3350,SPACE=(CYL,(200,200)),
//               DISP=(NEW,CATLG,DELETE)
//*  FLAMIMS-STATISTIK
//FLPRINT     DD SYSOUT=*

Use of the FLAM-ims overhead procedures

Based on the statistics information, one is able to make a qualified selection of the 4 overhead procedures for the compressed segment.

If the statistics version is used, a new distribution of the segment sets is obtained after the use of the overhead procedures.

For online production, the FLAMIMS module must be used.

Listing of the DBD-CSECT'S without using FLAMIMS:

****************************************************
*    SEGM COMPACTION RTN CSECT  -  SEGNAME CSCT    *
****************************************************

SEG1   CSECT
       DC     CL8'SEG1'     SEGMENT NAME
       DC     CL8'FLAMIMS'  COMPACTION ROUTINE NAME
       DC     A(0)          COMPACTION RTN ENTRY POINT
       DC     AL2(9*256+5)  FLAG + SEQ FIELD EXEC LEN
       DC     AL2(0)        SEQUENCE FIELD OFFSET
       DC     AL2(96)       SEGMENT MAX DATA LENGTH
       DC     AL2(32)       COMPACTION RTN CSECT SIZE
       DC     A(0)          RESERVED

SEG2   CSECT
       DC     CL8'SEG2'     SEGMENT NAME
       DC     CL8'FLAMIMS'  COMPACTION ROUTINE NAME
       DC     A(0)          COMPACTION RTN ENTRY POINT
       DC     AL2(13*256+1) FLAG + SEQ FIELD EXEC LEN
       DC     AL2(2)        SEQUENCE FIELD OFFSET
       DC     AL2(609)      SEGMENT MAX DATA LENGTH
       DC     AL2(32)       COMPACTION RTN CSECT SIZE
       DC     A(0)          RESERVED

SEG3   CSECT
       DC     CL8'SEG3'     SEGMENT NAME
       DC     CL8'FLAMIMS'  COMPACTION ROUTINE NAME
       DC     A(0)          COMPACTION RTN ENTRY POINT
       DC     AL2(9*256+5)  FLAG + SEQ FIELD EXEC LEN
       DC     AL2(0)        SEQUENCE FIELD OFFSET
       DC     AL2(104)      SEGMENT MAX DATA LENGTH
       DC     AL2(32)       COMPACTION RTN CSECT SIZE
       DC     A(0)          RESERVED

SEG4   CSECT
       DC     CL8'SEG4'     SEGMENT NAME
       DC     CL8'FLAMIMS'  COMPACTION ROUTINE NAME
       DC     A(0)          COMPACTION RTN ENTRY POINT
       DC     AL2(5*256+0)  FLAG + SEQ FIELD EXEC LEN
       DC     AL2(0)        SEQUENCE FIELD OFFSET
       DC     AL2(153)      SEGMENT MAX DATA LENGTH
       DC     AL2(32)       COMPACTION RTN CSECT SIZE
       DC     A(0)          RESERVED

These DBD-CSECT'S are to be supplemented with the details of the award procedure and edited as a member.

In our example we use the following overhead procedures:

Segment  SEG1   Variant   4   Rel.Percent  10

Segment  SEG2   Variant  12   Min.Value   120
                              Max.Value   300
                              Rel.Percent  10

Segment  SEG3   Variant  16   Min.Value    45
                              Max.Value    85

Segment  SEG4   Variant   8   Max.Value   100
                              Rel.Percent  10

Addition when using the FLAMIMS overhead method:

SEG1   CSECT
       DC     CL8'SEG1'     SEGMENT NAME
       DC     CL8'FLAMIMS'  COMPACTION ROUTINE NAME
       DC     A(0)          COMPACTION RTN ENTRY POINT
       DC     AL2(9*256+5)  FLAG + SEQ FIELD EXEC LEN
       DC     AL2(0)        SEQUENCE FIELD OFFSET
       DC     AL2(96)       SEGMENT MAX DATA LENGTH
       DC     AL2(40)       COMPACTION RTN CSECT SIZE
       DC     A(0)          RESERVED
       DC     XL1'00'       SEGMENT NUMBER
       DC     AL1(04)       VAR ART
       DC     AL2(000)      MINIMAL VALUE
       DC     AL2(000)      MAXIMAL VALUE
       DC     AL2(10)       RELATIVE PERCENT

SEG2   CSECT
       DC     CL8'SEG2'     SEGMENT NAME
       DC     CL8'FLAMIMS'  COMPACTION ROUTINE NAME
       DC     A(0)          COMPACTION RTN ENTRY POINT
       DC     AL2(13*256+1) FLAG + SEQ FIELD EXEC LEN
       DC     AL2(2)        SEQUENCE FIELD OFFSET
       DC     AL2(609)      SEGMENT MAX DATA LENGTH
       DC     AL2(40)       COMPACTION RTN CSECT SIZE
       DC     A(0)          RESERVED
       DC     XL1'00'       SEGMENT NUMBER
       DC     AL1(12)       VAR ART
       DC     AL2(120)      MINIMAL VALUE
       DC     AL2(300)      MAXIMAL VALUE
       DC     AL2(10)       RELATIVE PERCENT

SEG3   CSECT
       DC     CL8'SEG3'     SEGMENT NAME
       DC     CL8'FLAMIMS'  COMPACTION ROUTINE NAME
       DC     A(0)          COMPACTION RTN ENTRY POINT
       DC     AL2(9*256+5)  FLAG + SEQ FIELD EXEC LEN
       DC     AL2(0)        SEQUENCE FIELD OFFSET
       DC     AL2(104)      SEGMENT MAX DATA LENGTH
       DC     AL2(40)       COMPACTION RTN CSECT SIZE
       DC     A(0)          RESERVED
       DC     XL1'00'       SEGMENT NUMBER
       DC     AL1(16)       VAR ART
       DC     AL2(45)       MINIMAL VALUE
       DC     AL2(85)       MAXIMAL VALUE
       DC     AL2(00)       RELATIVE PERCENT

SEG4   CSECT
       DC     CL8'SEG4'     SEGMENT NAME
       DC     CL8'FLAMIMS'  COMPACTION ROUTINE NAME
       DC     A(0)          COMPACTION RTN ENTRY POINT
       DC     AL2(5*256+0)  FLAG + SEQ FIELD EXEC LEN
       DC     AL2(0)        SEQUENCE FIELD OFFSET
       DC     AL2(153)      SEGMENT MAX DATA LENGTH
       DC     AL2(40)       COMPACTION RTN CSECT SIZE
       DC     A(0)          RESERVED
       DC     XL1'00'       SEGMENT NUMBER
       DC     AL1(08)       VAR ART
       DC     AL2(000)      MINIMAL VALUE
       DC     AL2(100)      MAXIMAL VALUE
       DC     AL2(10)       RELATIVE PERCENT
       END

Then assemble this member and edit the DBD module with the Replace function of the Linkage Editor. The JCL specifications are e.g.:

//ASSREPLA JOB .....
//ASMXA    EXEC PGM=IEV90,REGION=1024K,
//         PARM=(NOBATCH,NODECK,'FLAG(0)',OBJECT,NORENT)
//SYSLIB   DD   DISP=SHR,DSN=SYS1.MACLIB,DCB=BLKSIZE=20000
//         DD   DISP=SHR,DSN=IMSVS.MACLIB
//SYSUT1   DD   DSN=&&SYSUT1,SPACE=(CYL,(1,1)),UNIT=DISK
//SYSUT2   DD   DSN=&&SYSUT2,SPACE=(CYL,(1,1)),UNIT=DISK
//SYSUT3   DD   DSN=&&SYSUT3,SPACE=(CYL,(1,1)),UNIT=DISK
//SYSIN    DD   DISP=SHR,DSN=ANW.DBDSOURC(member)
//SYSPRINT DD   SYSOUT=*
//SYSPUNCH DD   SYSOUT=*
//SYSLIN   DD   DSN=&&OBJSET,UNIT=DISK,SPACE(CYL,(1,1)),
//         DISP=(MOD,PASS)
//*
//LNKXA    EXEC PGM=IEWL,REGION=1024K,
//         COND=(0,LT,ASMXA),PARM=(XREF,LET,LIST)
//SYSUT1   DD   DSN=&&SYSUT1,
//              UNIT=(DISK,SEP=(SYSLIN,SYSIN,SYSLMOD)),
//              SPACE=(CYL,(1,1))
//SYSPRINT DD   SYSOUT=*
//SYSLIB   DD   DISP=SHR,DSN=SYS1.LINKLIB
//OLDLOAD  DD   DISP=SHR,DSN=ANW.DBDLIB
//SYSLMOD  DD   DISP=SHR,DSN=ANW.DBDLIB(TESTFLAM)
//SYSLIN   DD   DSN=&&OBJSET,DISP=(OLD,DELETE)
//         DD   DDNAME=SYSIN
//SYSIN    DD   *
  INCLUDE OLDLOAD(TESTFLAM)
  ENTRY   TESTFLAM
  NAME TESTFLAM (R)
/*

After the procedure described above, the database can be loaded with the utility DFSURGL0.

After the implementation of the overhead procedures, it must always be ensured that after a DBD generation, the DBD-CSECT'S are also edited, assembled and the DBD module is replaced.

If the programs FLIMSTA or FLORGDB were used for analysis purposes, the new statistics output can be used to check whether the overhead procedures used make sense with the specified values.

This statistics contains a new distribution (dispersion) of the segment records taking into account the overhead procedure:

F L A M   (R)   I M S   D A T A   C O M P R E S S I O N   A N A L Y S I S
Copyright (C)   by limes datentechnik gmbh


Name of Segment:        SEG1

Pad Variant No.      4
Min. Value    -      Max. Value    -      Rel. Percent    10

                                         Prfx   AVG    AVG    Total
  No.        Def    Max    Min    AVG    +      Data   Pad    Segment
  Records    Len        Len       Len    Key    Len    Len    Length
+--------+------+------+------+------+------+------+------+----------+
       50     96     96     96     96      6     90             4,800  Orig.
                     94     33     80      8     65      7      3,991  Comp.
                                                  Total Saved     809

Average Data Compression      27.8%

Total Pad Overhead             8.6%

Total Segment Reduction       16.9%


Procentual Distribution of Records by Procentual Def. Record Length
                                                (100% = Def. Length)


 <15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90 >90% Def Len
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                   2          22                               2  74% Records




Name of Segment:        SEG2

Pad Variant No.      12
Min. Value    120    Max. Value    300    Rel. Percent    10

                                         Prfx   AVG    AVG    Total
  No.        Def    Max    Min    AVG    +      Data   Pad    Segment
  Records    Len        Len       Len    Key    Len    Len    Length
+--------+------+------+------+------+------+------+------+----------+
       52    609    609     90    478      4    474            24,853  Orig.
                    395    120    306      4    296      6     15,886  Comp.
                                                  Total Saved   8,967

Average Data Compression      37.6%

Total Pad Overhead             1.7%

Total Segment Reduction       36.1%


Procentual Distribution of Records by Procentual Def. Record Length
                                                (100% = Def. Length)


 <15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90 >90% Def Len
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
       2  25       2               4  15  52                        % Records




Name of Segment:        SEG3

Pad Variant No.      16
Min. Value    45     Max. Value    85     Rel. Percent    -

                                         Prfx   AVG    AVG    Total
  No.        Def    Max    Min    AVG    +      Data   Pad    Segment
  Records    Len        Len       Len    Key    Len    Len    Length
+--------+------+------+------+------+------+------+------+----------+
       94    104    104    104    104      6     98             9,776  Orig.
                    101     45     87      8     63     16      8,140  Comp.
                                                  Total Saved   1,636

Average Data Compression      35.8%

Total Pad Overhead            18.0%

Total Segment Reduction       16.8%


Procentual Distribution of Records by Procentual Def. Record Length
                                                (100% = Def. Length)


 <15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90 >90% Def Len
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                           2                              81   1  15% Records




Name of Segment:        SEG4

Pad Variant No.      8
Min. Value    -      Max. Value    100    Rel. Percent    10

                                         Prfx   AVG    AVG    Total
  No.        Def    Max    Min    AVG    +      Data   Pad    Segment
  Records    Len        Len       Len    Key    Len    Len    Length
+--------+------+------+------+------+------+------+------+----------+
       47    153    153      6     75      2     73             3,527  Orig.
                    120      7     64      2     59      3      3,026  Comp.
                                                  Total Saved     501

Average Data Compression      19.2%

Total Pad Overhead             5.2%

Total Segment Reduction       14.3%


Procentual Distribution of Records by Procentual Def. Record Length
                                                (100% = Def. Length)


 <15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90 >90% Def Len
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
   9      15       6  32          13   2      11      11            % Records




                     S U M M A R Y   D E S C R I P T I O N
                               FOR DBD TESTFLAM

                                Original                 Compressed
                   Def ! AVG  Pfx  AVG  Total   ! AVG  AVG  AVG  AVG  Total   !
 Segment  Records  Rec ! Rec  +    DTA  Segment ! Rec  DTA  DTA  Pad  Segment !
                   Len ! Len  Key  Len  Length  ! Len  Len   %   Len  Length  !
+------+---------+-----+----+----+----+---------+----+----+----+----+---------+
 SEG1          50    96   96    6   90     4,800   80   65   28    7     3,991
 SEG2          52   609  478    4  474    24,853  306  296   38    6    15,886
 SEG3          94   104  104    6   98     9,776   87   63   36   16     8,140
 SEG4          47   153   75    2   73     3,527   64   59   19    3     3,026
                                          ------                        ------
                                          42,956                        31,043


Total Data Base Reduction       27.8%      11,913 Bytes

Database reorganization with decompression and compression for production

DBD FOR TESTDATABASE FOR FLAMIMS
*
*   WITH INDICATION OF COMPRESSION FOR PRODUCTION
*
        DBD     NAME=TESTFLAM,ACCESS=HDAM,            *
                RMNAME=(TRANDOM,8,63638,100)
        DATASET DD1=DATASET1,DEVICE=3350,SCAN=0
*
        SEGM    NAME=SEG1,PARENT=0,BYTES=96,PTR=T,    *
                COMPRTN=FLAMIMS
        FIELD   NAME=(S1F1,SEQ,U),BYTES=6,            *
                START=1,TYPE=X
        FIELD   NAME=S1F2,Bytes=1,START=7,TYPE=X
        FIELD   NAME=S1F3,Bytes=1,START=8,TYPE=X
*
        SEGM    NAME=SEG2,PARENT=SEG1,                *
                BYTES=(609,7),PTR=T,                  *
                COMPRTN=FLAMIMS
        FIELD   NAME=(S2F1,SEQ,U),BYTES=2,            *
                START=3,TYPE=P
*
        SEGM    NAME=SEG3,PARENT=SEG1,                *
                BYTES=104,PTR=T                       *
                COMPRTN=FLAMIMS
        FIELD   NAME=(S3F1,SEQ,U),BYTES=6,            *
                START=1,TYPE=X
        FIELD   NAME=S3F2,Bytes=2,START=1,TYPE=P
        FIELD   NAME=S3F3,Bytes=2,START=3,TYPE=P
        FIELD   NAME=S3F4,Bytes=2,START=5,TYPE=P
        FIELD   NAME=S3F5,Bytes=1,START=7,TYPE=X
        FIELD   NAME=S3F6,Bytes=1,START=8,TYPE=X
        FIELD   NAME=S3F7,Bytes=1,START=20,TYPE=X
        FIELD   NAME=S3F8,Bytes=1,START=76,TYPE=X
*
        SEGM    NAME=SEG4,PARENT=SEG3                 *
                BYTES=(153,5),PTR=T,                  *
                COMPRTN=FLAMIMS

If an overhead procedure was used when reloading the database, it must be ensured that the replaced DBD module is in the DBDLIB before reorganization. (see previous Example: Use of the FLAM-ims overhead procedures)

With this DBD and the utility DFSURGU0 the database is loaded. The JCL specifications are e.g:

//UNLOAD    JOB ...
//STEP      EXEC PGM=DFSRRC00,
//               PARM='ULU,DFSURGU0,TESTFLAM',
//               REGION=1024K
//STEPLIB     DD DSN=IMSVS.RESLIB,DISP=SHR
//            DD DSN=ANW.USERLIB,DISP=SHR
//            DD DSN=FLAM.IMSLOAD,DISP=SHR
//DFSRESLIB   DD DSN=IMSVS.RESLIB,DISP=SHR
//IMS         DD DSN=ANW.DBDLIB,DISP=SHR
//SYSPRINT    DD SYSOUT=*
//SYSUDUMP    DD DUMMY
//DFSURGU1    DD DSN=ANW.HDUNL.TESTFLAM,
//               DISP=(NEW,CATLG,DELETE),
//               UNIT=CTAPE,LABEL=RETPD=0001
//DFSVSAMP    DD DSN=DBA.IMS.PARMLIB(DFSVSM01),
//               DISP=SHR
//TESTFLAM    DD DSN=ANW.DATABASE.TESTFLAM,
//               DISP=SHR

With this DBD and the utility DFSURGL0 the database is loaded. The JCL specifications are e.g.:

//RELOAD    JOB ...
//STEP      EXEC PGM=DFSRRC00,
//               PARM='ULU,DFSURGL0,TESTFLAM',
//               REGION=1024K
//STEPLIB     DD DSN=IMSVS.RESLIB,DISP=SHR
//            DD DSN=ANW.USERLIB,DISP=SHR
//            DD DSN=FLAM.IMSLOAD,DISP=SHR
//DFSRESLIB   DD DSN=IMSVS.RESLIB,DISP=SHR
//IMS         DD DSN=ANW.DBDLIB,DISP=SHR
//SYSPRINT    DD SYSOUT=*
//SYSUDUMP    DD DUMMY
//DFSUINPT    DD DSN=ANW.HDUNL.TESTFLAM,
//               DISP=SHR,UNIT=CTAPE,VOL=SER=111111
//DFSURWF1    DD DUMMY,
//               DCB=(RECFM=VB,LRECL=900,BLKSIZE=1008)
//DFSVSAMP    DD DSN=DBA.IMS.PARMLIB(DFSVSM01),
//               DISP=SHR
//DFSURCDS    DD DUMMY
//TESTFLAM    DD DSN=ANW.DATABASE.TESTFLAM,
//               DCB=(DSORG=PS),
//               UNIT=3350,SPACE=(CYL,(200,200)),
//               DISP=(NEW,CATLG,DELETE)

Database reorganisation with compressed segments

*   DBD FOR TESTDATABASE FOR FLAMIMS
*
*   CHANGE FOR REORGANISATION WITH COMPRESSED SEGMENTS
*
        DBD     NAME=TESTFLAM,ACCESS=HDAM,            *
                RMNAME=(TRANDOM,8,63638,100)
        DATASET DD1=DATASET1,DEVICE=3350,SCAN=0
*
        SEGM    NAME=SEG1,PARENT=0,BYTES=98,10,PTR=T
*               THE SPECIFICATION FOR COMPRESSION OMITTED
*               SENTENCE FORMAT, SENTENCE LENGTH AND KEY-
*               POSITION HAVE BEEN CHANGED
        FIELD   NAME=(S1F1,SEQ,U),BYTES=6,            *
                START=3,TYPE=X
        FIELD   NAME=S1F2,Bytes=1,START=9,TYPE=X
        FIELD   NAME=S1F3,Bytes=1,START=10,TYPE=X
*
        SEGM    NAME=SEG2,PARENT=SEG1,                *
                BYTES=(609,7),PTR=T
*               THE SPECIFICATION FOR COMPRESSION OMITTED
        FIELD   NAME=(S2F1,SEQ,U),BYTES=2,            *
                START=3,TYPE=P
*
        SEGM    NAME=SEG3,PARENT=SEG1,                *
                BYTES=(106,10),PTR=T                  
*               THE SPECIFICATION FOR COMPRESSION OMITTED
*               SENTENCE FORMAT, SENTENCE LENGTH AND KEY-
*               POSITION HAVE BEEN CHANGED
        FIELD   NAME=(S3F1,SEQ,U),BYTES=6,            *
                START=3,TYPE=X
        FIELD   NAME=S3F2,Bytes=2,START=3,TYPE=P
        FIELD   NAME=S3F3,Bytes=2,START=5,TYPE=P
        FIELD   NAME=S3F4,Bytes=2,START=7,TYPE=P
        FIELD   NAME=S3F5,Bytes=1,START=9,TYPE=X
        FIELD   NAME=S3F6,Bytes=1,START=10,TYPE=X
        FIELD   NAME=S3F7,Bytes=1,START=22,TYPE=X
        FIELD   NAME=S3F8,Bytes=1,START=78,TYPE=X
*
        SEGM    NAME=SEG4,PARENT=SEG3,                *
                BYTES=(135,5),PTR=T
*               THE SPECIFICATION FOR COMPRESSION OMITTED

With this DBD and the utility DFSURGU0 the database is unloaded. The JCL details are e.g.:

//UNLOAD    JOB ...
//STEP      EXEC PGM=DFSRRC00,
//               PARM='ULU,DFSURGU0,TESTFLAM',
//               REGION=1024K
//STEPLIB     DD DSN=IMSVS.RESLIB,DISP=SHR
//            DD DSN=ANW.USERLIB,DISP=SHR
//DFSRESLIB   DD DSN=IMSVS.RESLIB,DISP=SHR
//IMS         DD DSN=ANW.DBDLIB,DISP=SHR
//SYSPRINT    DD SYSOUT=*
//SYSUDUMP    DD DUMMY
//DFSURGU1    DD DSN=ANW.HDUNL.TESTFLAM,
//               DISP=(NEW,CATLG,DELETE),
//               UNIT=CTAPE,LABEL=RETPD=0001
//DFSVSAMP    DD DSN=DBA.IMS.PARMLIB(DFSVSM01),
//               DISP=SHR
//TESTFLAM    DD DSN=ANW.DATABASE.TESTFLAM,
//               DISP=SHR

With this DBD and the utility DFSURGL0 the database is loaded. The JCL details are e.g.:

//RELOAD    JOB ...
//STEP      EXEC PGM=DFSRRC00,
//               PARM='ULU,DFSURGL0,TESTFLAM',
//               REGION=1024K
//STEPLIB     DD DSN=IMSVS.RESLIB,DISP=SHR
//            DD DSN=ANW.USERLIB,DISP=SHR
//DFSRESLIB   DD DSN=IMSVS.RESLIB,DISP=SHR
//IMS         DD DSN=ANW.DBDLIB,DISP=SHR
//SYSPRINT    DD SYSOUT=*
//SYSUDUMP    DD DUMMY
//DFSUINPT    DD DSN=ANW.HDUNL.TESTFLAM,
//               DISP=SHR,UNIT=CTAPE,VOL=SER=111111
//DFSURWF1    DD DUMMY,
//               DCB=(RECFM=VB,LRECL=900,BLKSIZE=1008)
//DFSVSAMP    DD DSN=DBA.IMS.PARMLIB(DFSVSM01),
//               DISP=SHR
//DFSURCDS    DD DUMMY
//TESTFLAM    DD DSN=ANW.DATABASE.TESTFLAM,
//               DCB=(DSORG=PS),
//               UNIT=3350,SPACE=(CYL,(200,200)),
//               DISP=(NEW,CATLG,DELETE)

Evaluation of hard disk usage

The evaluation of the used and free areas of a database on the disks can be done via IDCAMS (only with VSAM) or e.g. SMU. The evaluation with IDCAMS yields less information than with SMU (Space Management Utility).

With IDCAMS, the file names, attributes, the used disks, the number of used and free reserved areas as well as statistics on accesses are output.

With the SMU, information about the files and statistics are also output. The used and free areas on the disks are listed in detail according to various aspects:

In order to realise the advantages of compressing a database, it is particularly important to indicate the free areas on the disks.

From the free areas in the data blocks, one can see how quickly and to what extent splits are to be expected and thus how much reorganization of the database will be necessary.

To compare the disk occupancy of an uncompressed and a compressed database, an evaluation is made in each case after loading the uncompressed and the compressed database. From the comparison of the two evaluations it can be seen how much more favorable the disk occupancy is with compressed data. The results of the above tests are given as an example.

The evaluation of the disk allocation for the entire database resulted with IDCAMS and SMU:

/---------------------------------------------------------------------\
|                               HDAM - Reload                         |
|                         ohne         |     mit                      |
|                      Komprimierung   | Komprimierung                |
|--------------------------------------|------------------------------|
| IDCAMS                               |                              |
|                                      |                              |
| record total                65.129   |        63.863                |
| record retrieved           282.242   |       155.612                |
| freespace bytes          9.711.616   |    14.897.152                |
|                                      |                              |
|--------------------------------------|------------------------------|
| SMU                                  |                              |
|                                      |                              |
| freespace bytes        110.972.888   |   166.269.526                |
| blocks without                       |                              |
|   free space                   850   |           175                |
| blocks with                          |                              |
|   fee space                 64.279   |        63.688                |
| empty blocks                 1.336   |         1.347                |
| total blocks                66.465   |        65.213                |
| blocks with space                    |                              |
|   for longest seg.          49.941   |        62.012                |
\--------------------------------------|------------------------------/

Per segment type, the SMU evaluation resulted in:

for HDAM reload without compression:

Seg.   Amount     Over-      Length          Amt./  avera.
name    Seg.      flow    Prfx+Data=Seg.   * Root = Seg.l.

SEG1    333.191    2.886    14   96   110   1,000   110,00
SEG2    336.409    3.341     6  139v  145   1,009   146,30
SEG3    568.623   39.935    10  104   114   1,706   194,48
SEG4     80.530   12.878     6   25v   31   0,241     7,47
      ---------   ------                            ------
      1.318.753   59.040  avera. DB record length =  458,26

for HDAM-Reload with compression:

Seg.   Amount     Over-      Length          Amt./  avera.
name   of Seg.    flow    Prfx+Data=Seg.   * Root = Seg.l.

SEG1    333.191      600    14   65v    7   1,000    79,00
SEG2    336.409      891     6   76v   82   1,009    82,73
SEG3    568.623    9.510    10   53v   63   1,706   107,47
SEG4     80.530    4.512     6   25v   31   0,241     7,47
      ---------   ------                            ------
      1.318.753   15.513  avera. DB record length =  276,78

Installation

FLAM-ims uses tables from IMS for the output of error messages, e.g. to specify the names of the segment and database. Since these tables are partly version-dependent, the interface modules for the compression modules are delivered in the source code. This means that they only have to be reassembled and bound when there is a change of version of IMS, without the need for a new delivery of FLAM-ims.

The FLAMIMS, FLIMSSTA and FLIMSORG user exits are delivered as LE less assembler source in FLAM.SRCLIB. Additional to link the FLAMIMS exits the object FLAMX5, FLAMX6 and FLAMMEMO from FLAM.OBJ are required. We recommend to build an SMPE package using the current FLAM installation and the dependent IMS version to assemble and link the exits.

Additional the FLAM distribution contains a batch test program (FLIMSTST) and IMS macro definitions (FLIMSMAC) against the FLAMFIO object to build, link and test the exists without IMS in a batch environment. The corresponding build and link steps can be fount in FLAM.JOBLIB(SBUILD) and a job to run the test program can be faound in FLAM.JOBLIB(FLIMSTST).