每次执行作业时,我都会尝试对数据集进行排序,并将其写入新的数据集,即它的扩展(ABEND=U0016)。
消息形式SYSOUT。
WER276B SYSDIAG= 24646562, 29667262, 29667262, 27500165
WER164B 307,288K BYTES OF VIRTUAL STORAGE AVAILABLE, MAX REQUESTED,
WER164B 0 BYTES RESERVE REQUESTED, 307,272K BYTES USED
WER036B G=5174,B=1,BIAS=99
WER162B 75 PREALLOCATED SORTWORK TRACKS, 3,750,000 DYNAMICALLY
ALLOCATED,
WER162B 26,721,480 ACQUIRED IN 2,230 SECONDARY EXTENTS, 0 RELEASED,
TOTAL 30,471,555 TRACKS USED
WER046A SORT CAPACITY EXCEEDED
WER493I ZIIP PROCESSOR USED
WER211B SYNCSMF CALLED BY SYNCSORT; RC=0000
WER449I SYNCSORT GLOBAL DSM SUBSYSTEM ACTIVE
WER066A APROX RCD CNT 30430982 这是我的代码:
//STEP50 EXEC SORTD
//SORTIN DD DSN=FILEXYZ(0),
// DISP=SHR,DCB=BUFNO=192
//SORTOUT DD DSN=FILE2XXY,
// DISP=(NEW,CATLG,DELETE),RETPD=365,VOL=(,,,99),
// DCB=(RECFM=FB,LRECL=30050,BLKSIZE=0,BUFNO=192),
// UNIT=(TAPE,2)
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=(19,5,PD,A,8,6,PD,A,50,2,ZD,A)
OUTREC IFTHEN=(WHEN=(70,18,CH,EQ,C' encoding="IBM037"'),
OVERLAY=(70:C' encoding="UTF-8"'))
OPTION DYNALLOC=(SYSDA,255)
/* 以下是来自jcl的SORTD代码:
4 //STEP40 EXEC SORTD
5 XXSORTD PROC CYLS=1,SYSFICH='*',
XX DMPCLAS='1,DEST=ABNORMAL'
XX*
XX* REMOVED SEP PARAMETER 89/07/20
XX*
6 XXSORTD EXEC PGM=SORT
7 //SYSOUT DD SYSOUT=*
X/SYSOUT DD SYSOUT=&SYSFICH
IEFC653I SUBSTITUTION JCL - SYSOUT=*
8 XXSORTWK01 DD DSN=&WORK1,SPACE=(CYL,(&CYLS)),UNIT=SORTWORK
IEFC653I SUBSTITUTION JCL - DSN=&WORK1,SPACE=(CYL,
(1)),UNIT=SORTWORK
9 XXSORTWK02 DD DSN=&WORK2,SPACE=(CYL,(&CYLS)),UNIT=SORTWORK
IEFC653I SUBSTITUTION JCL - DSN=&WORK2,SPACE=(CYL,
(1)),UNIT=SORTWORK
10 XXSORTWK03 DD DSN=&WORK3,SPACE=(CYL,(&CYLS)),UNIT=SORTWORK
IEFC653I SUBSTITUTION JCL - DSN=&WORK3,SPACE=(CYL,
(1)),UNIT=SORTWORK
11 XXSORTWK04 DD DSN=&WORK4,SPACE=(CYL,(&CYLS)),UNIT=SORTWORK
IEFC653I SUBSTITUTION JCL - DSN=&WORK4,SPACE=(CYL,
(1)),UNIT=SORTWORK
12 XXSORTWK05 DD DSN=&WORK5,SPACE=(CYL,(&CYLS)),UNIT=SORTWORK
IEFC653I SUBSTITUTION JCL - DSN=&WORK5,SPACE=(CYL,
(1)),UNIT=SORTWORK
13 XXSYSABEND DD SYSOUT=&DMPCLAS
IEFC653I SUBSTITUTION JCL - SYSOUT=1,DEST=ABNORMAL
14 XXSYSUDUMP DD SYSOUT=&DMPCLAS
IEFC653I SUBSTITUTION JCL - SYSOUT=1,DEST=ABNORMAL
15 //SORTIN DD DSN=FILEXYZ(0),
// DISP=SHR,DCB=BUFNO=192
16 //SORTOUT DD DSN=FILE2XXY,
// DISP=(NEW,PASS,DELETE),RETPD=365,VOL=(,,,99),
// DCB=(RECFM=FB,LRECL=30050,BLKSIZE=0,BUFNO=192),
// UNIT=TAPE
17 //SYSPRINT DD SYSOUT=*
18 //SYSIN DD * 请给我一些提示,以解决这个问题。谢谢。
发布于 2018-08-21 10:31:08
我将在这里讨论这个问题,并假设这里讨论的文件与前面通过相同的OP:How can I reduce CPU in SORT operation具有相同文件属性的问题相同。
在LRECL为30050的地方有80,000,000条记录,您的输入文件大约为2.2TB。
一个普遍接受的排序工作空间的经验法则是输入文件大小的1.3倍。因此,您需要针对排序工作空间的~2.85TB (即370万个赛勒斯或5500万个轨道)。
使用SyncSort的最大值为255个SORTWK,您将需要在每个受支持的255个DDs中获得大约14,500个CYLs,以满足您的空间需求。这有点极端,可能会带来许多挑战,但有几个选项可以让您实现这一点。
免责声明--我本人并没有使用过SyncSort,但是在仔细阅读了文档之后,这些概念看起来与我有经验的其他类型的产品是一致的。
依赖DYNALLOC
您已经指定了DYNALLOC=(SYSDA,255),这通常是推荐的方法。但是,当前的设置存在以下几个问题:
SORTD PROC,您将盗用5个本可以更恰当地使用的DDs。使用SPACE=(CYL,(1))的PROC中硬编码的SORTWK限制了您可以获得的总工作空间,因为DYNALLOC现在只有250个DDs可以使用。正如@SaggingRufus建议的那样,直接调用SYNCSORT将避免PROC DDs的1-CYL分配,并允许DYNALLOC与所有255个DDs一起工作。因此,绕过PROC来提供对所有255个DDs的访问,并提供一个估计的记录计数,可以使SyncSort更可靠地计算必要的工作空间,但是单个排序中的数据量很可能是一个异常值,默认计算可能不够。此外,工作空间池中可用的空闲空间可能是一个限制因素。
硬编码SORTWK DDs
如果在JCL中硬编码SORTWK,则可以绕过PROC中的DDs,并消除DYNALLOC计算的一些不确定性。这实际上是我个人在这个场景…中首先采用的方法。硬编码每个SORTWK DD与最好的选择,以获得~14,500个囊肿在每个DD。所以:
SPACE=(CYL,(4000,1000)) (尽管SyncSort应该计算次级分配本身)DSNTYPE=LARGE以允许每个卷大于4G (每个SORTWK限制为1卷),这些DD的聚合应该为您的排序需求提供足够的工作空间。以上每个选项都假设您的商店的工作空间池中有足够的vols/区段/总体空间。我建议与您的存储管理团队协调,以确保资源的可用性。
使用MAXSORT
SyncSort提供了容纳非常大的数据集的MAXSORT功能。它将输入文件的部分排序为中间文件,并为后续部分重新使用SORTWK空间,直到每个部分的中间文件可以组合成一个输出文件。对于使用MAXSORT有特殊的要求。如前所述,我无法访问SyncSort,因此无法亲自测试此功能。您必须亲自研究SyncSort文档,以了解此功能的细节。
发布于 2018-08-14 14:58:21
由于排序输入是从磁带读取的,因此排序无法可靠地计算所需的排序工作空间。尝试将SIZE=Ennnnnnn参数添加到排序语句中。nnnnnnn是要读取的记录数。E告诉排序,这是一个估计。
发布于 2018-08-20 10:08:27
尝试直接调用SYNCSORT,而不是调用这个proc。此PROC仅设置5个工作文件。通常最好让SYNCSORT根据需要分配工作文件,而不是告诉它它可以使用多少。
我相信是工作文件耗尽了空间。试试这个:
//SORT10 EXEC PGM=SYNCSORT,
// PARM=('INCORE=OFF,DYNALLOC=(SYSDA,255)',EQUALS)
//SORTIN DD DSN=FILEXYZ(0),
// DISP=SHR,DCB=BUFNO=192
//SORTOUT DD DSN=FILE2XXY,
// DISP=(NEW,CATLG,DELETE),RETPD=365,VOL=(,,,99),
// DCB=(RECFM=FB,LRECL=30050,BLKSIZE=0,BUFNO=192),
// UNIT=(TAPE,2)
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SORTMSG DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=(19,5,PD,A,8,6,PD,A,50,2,ZD,A)
OUTREC IFTHEN=(WHEN=(70,18,CH,EQ,C' encoding="IBM037"'),
OVERLAY=(70:C' encoding="UTF-8"'))
OPTION DYNALLOC=(SYSDA,255)
/*https://stackoverflow.com/questions/51840054
复制相似问题