如何减少SORT操作中的CPU

时间:2018-07-28 11:31:43

标签: mainframe jcl dfsort

我正在使用DFSORT将Tape数据集复制到临时文件,并处理大约8000万条记录。仅花费3个小时即可复制数据集。 有没有其他方法可以减少CPU时间。 建议将非常有帮助。 谢谢。

GeolocationManager

3 个答案:

答案 0 :(得分:2)

我喜欢诊断这类问题...

8000万条记录(每条3万条记录)约为2.5TB,并且由于您正在读取和写入此数据,因此您正在处理至少5TB(不包括工作文件的I / O)。如果我做得对,那么三个小时的平均速度为500MB /秒。

要做的第一件事是了解DFSORT是否确实真正运行了3个小时,或者是否有等待时间的来源。例如,如果您的磁带是多卷数据集,则可能需要等待磁带装载时间。在Joblog消息中查找-可能是您3个小时中的20分钟只是在等待正确的磁带安装。

您还可能在等待时间上增加CPU使用率问题。根据系统的设置方式,您的工作可能只是获得一小部分CPU时间,然后等待其余时间。您可以通过查看消耗的CPU时间(也在工作日志消息中)并将其与经过的时间进行比较来判断...例如,如果您的工作在3个小时内获得了1000 CPU秒(TCB + SRB),在这段时间内平均使用9%的CPU。可能是在不同的工作类别中提交您的工作会有所不同-请咨询您的本地系统程序员。

当然,9%的CPU时间可能不是问题-您的工作可能受I / O约束很大,因此很多等待时间都是在等待I / O完成,而不是等待更多的CPU时间。您真正想知道的是您的等待时间是等待CPU访问,等待I / O还是其他原因。同样,如果您的本地系统程序员知道如何阅读RMF报告,则应该能够帮助您回答这个问题。

接下来要做的是更好地了解您的I / O,以减少需要执行的物理I / O操作的总数和/或使每个I / O运行更快。

这样想:每个物理I / O至少需要2-3毫秒。在最坏的情况下,如果您要读取/写入的这1.6亿条记录中的每条记录都需要3毫秒,那么经过的时间将是160,000,000 X .003 = 480,000秒,或五天半!

正如另一个响应者提到的那样,块大小和缓冲是您的朋友。由于I / O操作的大部分时间都归结为触发I / O并等待响应,因此“大I / O”所花的时间不会比“小I / O”所花的时间更长。通常,您希望执行尽可能少的物理I / O操作,以减少经过的时间。

根据所用磁带设备的类型,您应该能够在磁带上获得多达256K的块大小-每个I / O为7条记录。根据系统的配置方式,您的BLKSIZE = 0可能已经为您提供了此功能。请注意,尽管这取决于设备,并且请注意您的站点是否恰巧使用了将“真实”磁带驱动器映射到磁盘的虚拟磁带产品之一...在这里,超过特定限制(32K)的块大小运行速度会较慢。

不幸的是,缓冲比以前的建议要复杂得多。。。事实证明,BUFNO适用于使用IBM QSAM访问方法的相对简单的应用程序,而DFSORT并非如此。确实,DFSORT在如何执行I / O方面非常聪明,并且它根据可用内存动态创建缓冲区。不过,您仍然可以尝试在更大的区域(例如,JCL中的REGION = 0)运行作业,并且可能会找到DFSORT选项,例如MAINSIZE = MAX帮助-有关更多信息,请参见this link

对于磁盘I / O(包括那些SORTWK数据集),这里也有很多选项。您的30K LRECL在很大程度上限制了您可以执行的阻塞操作,但是从使用VIO数据集到PAV(并行访问卷),您可以进行各种磁盘调优练习。关键是,其中很多也是特定于配置的,因此正确的答案将取决于您的站点拥有什么以及如何进行全部配置。

但是,也许最重要的是,在您偶然找到正确答案之前,您不想纯粹尝试并尝试。如果您想学习,请熟悉RMF或您的站点具有的任何性能管理工具(或找到愿意与您合作的系统程序员)并进行深入研究。问问自己,瓶颈是什么-为什么这项工作不能更快地运行?然后找到瓶颈,修复它,然后继续进行下一个。这些都是非常重要的技能,一旦您了解了基础知识,它就会不再像一门妖术,而更像是一个系统的过程,您可以随便进行任何操作。

答案 1 :(得分:1)

自从写

  

...需要3个小时才能完成...

我想您真正想要的是减少经过时间,而不是CPU时间。经过的时间取决于许多因素,例如机器配置,机器速度,系统总负载,工作优先级等。如果没有有关环境的更多信息,很难给出建议。

但是,我看到您正在将排序输出写入临时数据集。我得出结论,还有另一步读取数据。为什么将这些数据写入磁带?磁盘肯定会更快,并减少了经过时间。


彼得

答案 2 :(得分:1)

有关改善I / O性能的一些评论,这应该会改善您的总体使用时间。

  1. 在您的SORTIN和SORTOUT DD语句上,将以下内容添加到您的DCB中。

摘自IBM的MVS JCL Manual第143页。

//SORTIN   DD DSN=FILEONE(0),                           
//            DISP=SHR<b>,DCB=BUFNO=192</b>                                            
//SORTOUT  DD DSN=&&TEMP,                                       
//            DISP=(NEW,PASS,DELETE),                          
//            DCB=(RECFM=FB,LRECL=30050,BLKSIZE=0,BUFNO=192),
//            UNIT=TAPE

这些天,我选择192作为其相对便宜的内存。根据您的环境进行调整。这实质上告诉系统每个I / O读取多少个块,从而减少了与I / O操作相关的时间。您可以使用此数字来获得最佳结果。默认值为5。

  

BUFNO =缓冲区
指定要分配的缓冲区数   到DCB。最大值通常为255,但可以由于以下原因而减小   该区域的大小。注意:请勿使用以下代码对BUFNO子参数进行编码   DCB子参数BUFIN,BUFOUT或DD参数QNAME。

  1. 您可以考虑使用块大小。输出上的块大小似乎很奇怪。确保针对要使用的设备进行了优化。对于TAPE设备,该值应尽可能大。对于3480或3490设备,此大小可以达到65535。您无需指定LRECL,而是指出其30050,则可以将BLKZIE指定为60100,即每个块有两个记录。更高的I / O效率。

有关BLKSIZE selection的磁带的更多信息。


3490 Emulation (VTS)    262144 (256 KB)
3590                    262144 (256 KB) (note: on some older models the limit is  
                                               229376 (224 KB) 262144 (256 KB)
  1. 如果您实际上正在使用TAPE,最后的快速提示是指定多个TAPE设备。这将允许在安装下一盘磁带时写入其中一盘磁带。我也在这里包括了BUFNO示例:

//SORTOUT DD DSN=&&TEMP, // DISP=(NEW,PASS,DELETE), // DCB=(RECFM=FB,LRECL=30050,BLKSIZE=0,BUFNO=192), // UNIT=(TAPE,2)

当然,这些优化取决于您的物理环境和DFSMS设置。