首页 > 解决方案 > 如何解决 SYNCSORT JCL 中的“WER046A SORT CAPACITY EXCEEDED”

问题描述

我正在尝试对数据集进行排序并写入一个新的数据集,每次我执行作业时,它都会异常终止(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 *     

请给我一些提示来解决这个问题。谢谢你。

标签: mainframejclsyncsort

解决方案


我将在这里竭尽全力,并假设此处所讨论的文件与上一个问题相同,相同 OP 具​​有相同的文件属性: 如何在 SORT 操作中减少 CPU

LRECL 为 30050 的 80,000,000 条记录,您的输入文件大约为 2.2TB。

一个普遍接受的排序工作空间的经验法则是输入文件大小的 1.3 倍。因此,您需要定位约 2.85TB(即约 370 万 CYLS 或约 5500 万轨道)的排序工作空间。

使用 SyncSort 最多 255 个 SORTWK DD,您需要在每个受支持的 255 个 DD 中获取约 14,500 个 CYL,以满足您的空间需求。这有点极端,可能会带来许多挑战,但有一些选项可以让您实现这一目标。

免责声明 - 我自己没有亲自使用过 SyncSort,但在仔细阅读文档后,这些概念看起来与我使用过的其他排序产品一致。

依靠 DYNALLOC

您已指定DYNALLOC=(SYSDA,255),这通常是推荐的方法。但是,您当前的设置存在几个问题:

  • 通过使用SORTDPROC,您正在抢夺 5 个本可以更恰当地利用的 DD。PROC 中硬编码的 SORTWK DDSPACE=(CYL,(1))限制了您可以获得的总工作空间,因为 DYNALLOC 现在只有 250 个 DD 可供使用。正如@SaggingRufus 建议的那样,直接调用 SYNCSORT 将避免 PROC DD 的 1-CYL 分配,并允许 DYNALLOC 与所有 255 个 DD 一起工作。

  • SyncSort 没有准确地投射必要的工作空间。根据您提供的输出,SyncSort 最初显式地获取了 75 个轨道(SORTD 过程中 5 个硬编码 DD 中的每个 1 个 CYL……换句话说,5 个 DD,1 个 CYL * 15 个 Tracks-per-CYL = 75),然后是动态的获得了额外的 3,750,000 曲目(1,000 CYL(或 15,000 曲目)* 250 DD)。然后,它在 2,230 个辅助扩展区中额外获得了 2670 万个磁道 (1.78MM CYL),这表明每个辅助扩展区平均有 799 个 CYL(或 11,983 个磁道),每个卷/DD 平均有 8.75 个辅助扩展区。所有这些都导致为排序工作空间分配了总共 ~1.6TB (~2MM Cyls),这是一种方式低于 2.2TB 输入文件的估计工作空间要求。即使我们将 DYNALLOC 属性应用到来自 PROC 的硬编码 SORTWK DD,也只会增加大约 32GB 的总工作空间,而且仍然严重不足。因此,正如@phunsoft 建议的那样,可能需要添加 SIZE=Ennnnnnnnn 参数,以使 SyncSort 适当地投影工作空间。

  • 附加说明 - 每个 DD/卷平均获得 <10 个辅助扩展区这一事实表明,您正在耗尽环境中工作空间池中卷上的可用空间。您应该与您的存储管理员协调,以确保有足够的磁盘空间可用于您的工作空间。

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

硬编码 SORTWK DD

如果您在 JCL 中对 SORTWK DD 进行硬编码,则可以绕过 PROC 中的 DD,并消除 DYNALLOC 计算的一些不确定性。这实际上是我个人在这种情况下首先采用的方法……使用最佳选项对每个 SORTWK DD 进行硬编码,以在每个 DD 上获得约 14,500 个 CYLS。所以:

  • 在作业中对 255 个 DD (SORTWK01 - SORTWKFF) 中的每一个进行硬编码

  • 包括SPACE=(CYL,(4000,1000))在每个 DD 上(即使 SyncSort 应该自己计算辅助分配)

  • 包括DSNTYPE=LARGE在每个 DD 上以允许每个卷大于 4G(每个 SORTWK 限制为 1 个卷) 这些 DD 的聚合应为您的排序要求提供足够的工作空间。

上述每个选项都假定您的商店的工作空间池中有足够的 vols/extents/overall-space 可用。我建议与您的存储管理团队协调以确保资源的可用性

使用 MAXSORT

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


推荐阅读