- Only one
SQL statement is executed.
- DB2
can optimize the join operation internally.
- Database
round trips are eliminated.
- CPU
and elapsed time are significantly reduced, especially when the list
contains many values.
- The
solution scales better as the number of diagnosis codes grows.
Mainframe Tips, Tricks And Tutorials
Mainframe tips
Sunday, September 6, 2026
𝗧𝗿𝗮𝗻𝘀𝗳𝗼𝗿𝗺𝗶𝗻𝗴 𝗮 𝗖𝗢𝗕𝗢𝗟 𝗔𝗿𝗿𝗮𝘆 𝗶𝗻𝘁𝗼 𝗮 𝗧𝗲𝗺𝗽𝗼𝗿𝗮𝗿𝘆 𝗧𝗮𝗯𝗹𝗲 𝗮𝗻𝗱 𝗝𝗼𝗶𝗻𝗶𝗻𝗴 𝘄𝗶𝘁𝗵 𝗮 𝗗𝗕𝟮 𝘁𝗮𝗯𝗹𝗲
Thursday, August 13, 2026
𝘇/𝗢𝗦 𝟯.𝟮 𝗗𝗲𝗳𝗲𝗰𝘁 : 𝟭𝟯 𝗦𝘁𝗲𝗽𝘀 𝗞𝗲𝗽𝘁 𝗔𝗽𝗽𝗲𝗻𝗱𝗶𝗻𝗴 𝗥𝗲𝗰𝗼𝗿𝗱𝘀 𝘁𝗼 𝘁𝗵𝗲 𝗗𝗮𝘁𝗮𝘀𝗲𝘁, 𝗯𝘂𝘁 𝗢𝗻𝗹𝘆 𝟳𝟬𝗠 𝗼𝗳 𝘁𝗵𝗲 𝗘𝘅𝗽𝗲𝗰𝘁𝗲𝗱 𝟱𝟵𝟰𝗠 𝗥𝗲𝗰𝗼𝗿𝗱𝘀 𝗔𝗿𝗲 𝗣𝗿𝗲𝘀𝗲𝗻𝘁
- RECFM: FB
- LRECL: 21
- BLKSIZE: 27,993
|
Step |
Records Written |
|
STEP100 |
37,923,095 |
|
STEP110 |
44,967,733 |
|
STEP120 |
57,202,964 |
|
STEP130 |
44,714,138 |
|
STEP140 |
43,599,256 |
|
STEP150 |
43,838,386 |
|
STEP160 |
45,313,346 |
|
STEP170 |
46,349,138 |
|
STEP180 |
45,525,353 |
|
STEP190 |
46,162,534 |
|
STEP200 |
46,518,402 |
|
STEP210 |
45,979,524 |
|
STEP220 |
46,381,066 |
Total records written from STEP100 to STEP220 : 594,474,935
Dataset Track Limitation
- The system can no longer
correctly address the entire dataset.
- It effectively treats
the dataset as if it contains only the records corresponding to the
overflowed tracks at the beginning of the file.
- Existing records are
overwritten as additional data is appended.
- Consequently, part of the previously accumulated data is lost.
First Overflow Event (After STEP130)
|
Step |
Records Written |
Running Record Count |
Calculated Tracks |
|
STEP100 |
37,923,095 |
37,923,095 |
14,225 |
|
STEP110 |
44,967,733 |
82,890,828 |
31,092 |
|
STEP120 |
57,202,964 |
140,093,792 |
52,549 |
|
STEP130 |
44,714,138 |
184,807,930 |
69,321 |
|
Step |
Records
Written |
Running
Record Count |
Calculated
Tracks |
|
STEP100 |
10,090,810 |
|
3,785 |
|
STEP140 |
43,599,256 |
53,690,066 |
20,139
|
|
STEP150 |
43,838,386 |
97,528,452 |
36,582 |
|
STEP160 |
45,313,346 |
142,841,798 |
53,579 |
|
STEP170 |
46,349,138 |
189,190,936 |
70,965 |
- First 10,090,810 records written from STEP100
- First 4,384,237
records written from STEP140
|
Step |
Records
Written |
Running
Record Count |
Calculated
Tracks |
|
STEP100 |
10,090,810 |
|
3,785 |
|
STEP140 |
4,384,237 |
|
1,645 |
|
STEP180 |
45,525,353 |
60,000,400 |
22,506 |
|
STEP190 |
46,162,534 |
106,162,934 |
39,821 |
|
STEP200 |
46,518,402 |
152,681,336 |
57,270 |
|
STEP210 |
45,979,524 |
198,660,860 |
74,517 |
- First 10,090,810 records written from STEP100
- First 4,384,237 records written from STEP140
- First 9,469,632 records written from STEP180
|
Step Contribution Retained
in Final Dataset |
Record Count |
|
STEP100 |
10,090,810 |
|
STEP140 |
4,384,237 |
|
STEP180 |
9,469,632 |
|
STEP220 |
46,381,066 |
|
Total Records in Final Dataset |
70,325,745 |
Sunday, August 9, 2026
𝗣𝗼𝘁𝗲𝗻𝘁𝗶𝗮𝗹 𝘇/𝗢𝗦 𝟯.𝟮 𝗗𝗲𝗳𝗲𝗰𝘁: 𝗕𝗮𝘀𝗶𝗰 𝗙𝗼𝗿𝗺𝗮𝘁 𝗦𝗲𝗾𝘂𝗲𝗻𝘁𝗶𝗮𝗹 𝗗𝗮𝘁𝗮𝘀𝗲𝘁𝘀 𝗘𝘅𝗰𝗲𝗲𝗱𝗶𝗻𝗴 𝘁𝗵𝗲 𝟲𝟱𝗞 𝗧𝗿𝗮𝗰𝗸 𝗟𝗶𝗺𝗶𝘁
Friday, August 7, 2026
𝗪𝗵𝘆 𝗗𝗦𝗟𝗜𝗦𝗧(𝟯.𝟰) 𝗥𝗲𝗽𝗼𝗿𝘁𝗲𝗱 𝟲% 𝗮𝗻𝗱 𝟯% 𝗨𝘁𝗶𝗹𝗶𝘇𝗮𝘁𝗶𝗼𝗻 𝗼𝗻 𝗙𝘂𝗹𝗹𝘆 𝗢𝗰𝗰𝘂𝗽𝗶𝗲𝗱 𝗠𝘂𝗹𝘁𝗶-𝗩𝗼𝗹𝘂𝗺𝗲 𝗗𝗮𝘁𝗮𝘀𝗲𝘁𝘀: 𝗔 𝗗𝗙𝗦𝗢𝗥𝗧 𝗜𝗻𝘃𝗲𝘀𝘁𝗶𝗴𝗮𝘁𝗶𝗼𝗻
Tracks % XT Device Dsorg Recfm Lrecl Blksz Created Referred
-------------------------------------------------------------------------------
XY67890.PRODHIST.ORDRARCH.BACK.DATA XXX710
69745 6 16 3390 PS FB 228 27816 2026/08/07 2026/08/07
-------------------------------------------------------------------------------
XY67890.PRODHIST.ORDRARCH.BACK.DATA XXX674
67860 3 11 3390 PS FB 228 27816 2026/08/07 2026/08/07
-------------------------------------------------------------------------------
XY67890.PRODHIST.ORDRARCH.BACK.DATA XXX612
60320 100 14 3390 PS FB 228 27816 2026/08/07 2026/08/07
-------------------------------------------------------------------------------
XY67890.PRODHIST.ORDRARCH.BACK.DATA XXX678
60320 93 11 3390 PS FB 228 27816 2026/08/07 2026/08/07
Data Set Name . . . . : XY67890.PRODHIST.ORDRARCH.BACK.DATA
General Data Current Allocation
Management class . . : XXXACTX Allocated megabytes : 13,701
Storage class . . . : XXXX Allocated extents . : 52
Volume serial . . . : XXX710 +
Device type . . . . : 3390
Data class . . . . . : DCXXXXX
Organization . . . : PS Current Utilization
Record format . . . : FB Used megabytes . . : 6,532
Record length . . . : 228 Used extents . . . : 2
Block size . . . . : 27816
1st extent megabytes: 100
Secondary megabytes : 400 Dates
Data set name type : Creation date . . . : 2026/08/07
Data set encryption : NO Referenced date . . : 2026/08/07
Expiration date . . : ***None***
//SORTIN DD DSN=XY67890.PRODHIST.ORDRARCH.BACK.DATA,DISP=SHR
//SORTOUT DD DUMMY
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
//*
//STEP020 EXEC PGM=SORT
//SORTIN DD DSN=XY67890.PRODHIST.ORDRARCH.BACK.DATA,DISP=SHR,
// VOL=(,,2)
//SORTOUT DD DSN=XY67890.PRODHIST.ORDRARCH.BACK.DATA.SNGLVOL2,
// DISP=(,CATLG),
// SPACE=(1,(200,200),RLSE),AVGREC=M
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
//*
//STEP030 EXEC PGM=SORT
//SORTIN DD DSN=XY67890.PRODHIST.ORDRARCH.BACK.DATA,DISP=SHR,
// VOL=(,,3)
//SORTOUT DD DSN=XY67890.PRODHIST.ORDRARCH.BACK.DATA.SNGLVOL3,
// DISP=(,CATLG),
// SPACE=(1,(200,200),RLSE),AVGREC=M
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
//*
//STEP040 EXEC PGM=SORT
//SORTIN DD DSN=XY67890.PRODHIST.ORDRARCH.BACK.DATA,DISP=SHR,
// VOL=(,,4)
//SORTOUT DD DSN=XY67890.PRODHIST.ORDRARCH.BACK.DATA.SNGLVOL4,
// DISP=(,CATLG),
// SPACE=(1,(200,200),RLSE),AVGREC=M
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
//*
SORTIN : DSNAME=XY67890.PRODHIST.ORDRARCH.BACK.DATA
SORTOUT : DSNAME=NULLFILE
RCD IN 62025525, OUT 62025525
SORTOUT : DSNAME=XY67890.PRODHIST.ORDRARCH.BACK.DATA.SNGLVOL2
RCD IN 45007745, OUT 45007745
SORTOUT : DSNAME=XY67890.PRODHIST.ORDRARCH.BACK.DATA.SNGLVOL3
RCD IN 28449905, OUT 28449905
SORTOUT : DSNAME=XY67890.PRODHIST.ORDRARCH.BACK.DATA.SNGLVOL4
RCD IN 13731825, OUT 13731825
|
Volume |
Record
Count Calculation |
Records
in Volume |
|
XXX710 (Vol 1) |
62,025,525 −
45,007,745 |
17,017,780 |
|
XXX674 (Vol 2) |
45,007,745 −
28,449,905 |
16,557,840 |
|
XXX612 (Vol 3) |
28,449,905 −
13,731,825 |
14,718,080 |
|
XXX678 (Vol 4) |
Remaining Records |
13,731,825 |
|
Volume |
Dataset
Size (Bytes) |
Track
Calculation |
Tracks
Used |
|
XXX710(Vol 1) |
3,880,053,840 |
3,880,053,840 ÷ (2
× 27,816) |
69,745 |
|
XXX674(Vol 2) |
3,775,187,520 |
3,775,187,520 ÷ (2
× 27,816) |
67,860 |
|
XXX612(Vol 3) |
3,355,722,240 |
3,355,722,240 ÷ (2
× 27,816) |
60,320 |
|
XXX678(Vol 4) |
3,130,856,100 |
3,130,856,100 ÷ (2
× 27,816) |
56,278 |
Dataset Size (Bytes) = Records × LRECL
Tracks Used = Dataset Size ÷ (2 × BLKSIZE)
LRECL = 228
BLKSIZE = 27816
|
Volume |
DSLIST Tracks |
DSLIST Used % |
Calculated Tracks Used (DFSORT) |
Comparison |
|
XXX710 |
69,745 |
6% |
69,745 |
Exact
match |
|
XXX674 |
67,860 |
3% |
67,860 |
Exact
match |
|
XXX612 |
60,320 |
100% |
60,320 |
Exact
match |
|
XXX678 | 60,320 |
93% |
56,278 |
Close
match. 60,320 × 93% = 56,098 tracks, which is very close to the calculated
value of 56,278 tracks |
- Volume
XXX710: 69,745 tracks allocated
- Excess
tracks = 69,745 − 65,535 = 4,210
- DSLIST
reported utilization = 4,210 / 69,745 ≈ 6%
- Volume
XXX674: 67,860 tracks allocated
- Excess
tracks = 67,860 − 65,535 = 2,325
- DSLIST
reported utilization = 2,325 / 67,860 ≈ 3%
Sunday, August 2, 2026
𝗨𝗻𝗱𝗲𝗿𝘀𝘁𝗮𝗻𝗱𝗶𝗻𝗴 𝗦𝗕𝟯𝟳 𝗮𝗻𝗱 𝗦𝗘𝟯𝟳 𝗔𝗯𝗲𝗻𝗱𝘀 𝗳𝗼𝗿 𝗦𝗲𝗾𝘂𝗲𝗻𝘁𝗶𝗮𝗹 𝗗𝗮𝘁𝗮𝘀𝗲𝘁𝘀
- Primary
allocation = 1 track
- Secondary
allocation = 1 track
- Maximum
number of extents allowed for a sequential dataset on a volume = 16 (1
primary extent + 15 secondary extents)
- 1
primary track
- 15
secondary tracks