首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决SYNCSORT中"WER046A排序容量超出“的问题

如何解决SYNCSORT中"WER046A排序容量超出“的问题
EN

Stack Overflow用户
提问于 2018-08-14 11:10:24
回答 3查看 3.2K关注 0票数 2

每次执行作业时,我都会尝试对数据集进行排序,并将其写入新的数据集,即它的扩展(ABEND=U0016)。

消息形式SYSOUT。

代码语言:javascript
复制
    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 

这是我的代码:

代码语言:javascript
复制
    //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代码:

代码语言:javascript
复制
       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 *     

请给我一些提示,以解决这个问题。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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一起工作。
  • SyncSort没有准确地投影出必要的工作空间。根据您提供的输出,SyncSort最初获得了75首曲目( SORTD proc…中的5个硬编码DDs中每个都有1个CYL )换句话说,5个DDs在1 CYL * 15轨道-每CYL= 75),然后动态地获得另外3,750,000轨道(1,000赛尔(或15,000轨道)* 250 DDs)。然后,它在2 230个二级范围内又购置了2 670万轨道(178MM赛尔),这表明平均每个二级范围有799个赛尔(或11 983个轨道),每卷/DD平均有8.75个二级范围。所有这些都会导致总共为排序工作空间分配1.6Tb (~2MM Cyls),这远远低于2.2TB输入文件的估计工作空间需求。即使我们从PROC中将DYNALLOC属性应用于硬编码的SORTWK,这也只会在整个工作空间中增加大约32 is,而且仍然严重不足。因此,正如@phunsoft所建议的,添加SIZE=Ennnnnnnn参数对于SyncSort进行适当的工作空间项目可能是必要的。
  • 另外的注意事项--每个DD/卷平均得到的是<10个二级区段,这意味着您正在耗尽工作空间池中的可用空间。您应该与存储管理员协调,以确保为您的工作空间提供足够的磁盘空间。

因此,绕过PROC来提供对所有255个DDs的访问,并提供一个估计的记录计数,可以使SyncSort更可靠地计算必要的工作空间,但是单个排序中的数据量很可能是一个异常值,默认计算可能不够。此外,工作空间池中可用的空闲空间可能是一个限制因素。

硬编码SORTWK DDs

如果在JCL中硬编码SORTWK,则可以绕过PROC中的DDs,并消除DYNALLOC计算的一些不确定性。这实际上是我个人在这个场景…中首先采用的方法。硬编码每个SORTWK DD与最好的选择,以获得~14,500个囊肿在每个DD。所以:

  • 作业中255个DDs (SORTWK01 - SORTWKFF)的硬编码
  • 在每个DD中包括SPACE=(CYL,(4000,1000)) (尽管SyncSort应该计算次级分配本身)
  • 在每个DD中包含DSNTYPE=LARGE以允许每个卷大于4G (每个SORTWK限制为1卷),这些DD的聚合应该为您的排序需求提供足够的工作空间。

以上每个选项都假设您的商店的工作空间池中有足够的vols/区段/总体空间。我建议与您的存储管理团队协调,以确保资源的可用性。

使用MAXSORT

SyncSort提供了容纳非常大的数据集的MAXSORT功能。它将输入文件的部分排序为中间文件,并为后续部分重新使用SORTWK空间,直到每个部分的中间文件可以组合成一个输出文件。对于使用MAXSORT有特殊的要求。如前所述,我无法访问SyncSort,因此无法亲自测试此功能。您必须亲自研究SyncSort文档,以了解此功能的细节。

票数 4
EN

Stack Overflow用户

发布于 2018-08-14 14:58:21

由于排序输入是从磁带读取的,因此排序无法可靠地计算所需的排序工作空间。尝试将SIZE=Ennnnnnn参数添加到排序语句中。nnnnnnn是要读取的记录数。E告诉排序,这是一个估计。

票数 0
EN

Stack Overflow用户

发布于 2018-08-20 10:08:27

尝试直接调用SYNCSORT,而不是调用这个proc。此PROC仅设置5个工作文件。通常最好让SYNCSORT根据需要分配工作文件,而不是告诉它它可以使用多少。

我相信是工作文件耗尽了空间。试试这个:

代码语言:javascript
复制
//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)                                 
/*
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51840054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档