如何减少 SORT 操作中的 CPU 占用

2024-01-06

我正在使用 DFSORT 将磁带数据集复制到临时文件,并处理大约 80000000 条记录。仅复制数据集就需要 3 个小时。 有没有其他方法可以减少CPU时间。 建议将会非常有帮助。 谢谢。

    //STEP40  EXEC SORTD                                              
    //SORTIN   DD DSN=FILEONE(0),                           
    //            DISP=SHR                                            
    //SORTOUT  DD DSN=&&TEMP,                                       
    //            DISP=(NEW,PASS,DELETE),                          
    //            DCB=(RECFM=FB,LRECL=30050,BLKSIZE=0),               
    //            UNIT=TAPE                                           
    //SYSOUT   DD SYSOUT=*                                            
    //SYSPRINT DD SYSOUT=*                                            
    //SYSIN    DD *                                                   
         SORT FIELDS=(14,6,PD,A,8,6,PD,A,45,2,ZD,A)                   
         OUTREC IFTHEN=(WHEN=(70,18,CH,EQ,C' encoding="IBM037"'),     
                     OVERLAY=(70:C'  encoding="UTF-8"'))              
         OPTION DYNALLOC=(SYSDA,255)                                  
    /*                                                                

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

每条 30K 的 80M 记录大约为 2.5TB,并且由于您正在读取和写入这些数据,因此您至少要处理 5TB(不包括工作文件的 I/O)。如果我没算错的话,三个小时内平均每秒传输 500MB。

首先要做的是了解 DFSORT 是否确实主动运行了 3 个小时,或者是否存在等待时间的来源。例如,如果您的磁带是多卷数据集,则磁带安装可能需要等待时间。在作业日志消息中查找这一点 - 可能 3 小时中的 20 分钟只是在等待安装正确的磁带。

您还可能会遇到 CPU 使用问题,从而延长等待时间。根据系统的设置方式,您的作业可能只获得一小部分 CPU 时间并等待其余时间。您可以通过查看消耗的 CPU 时间(也在作业日志消息中)并将其与经过的时间进行比较来判断...例如,如果您的作业在 3 小时内获得 1000 CPU 秒(TCB + SRB),那么您在此期间,CPU 使用率平均为 9%。在不同的工作类别中提交您的工作可能会产生影响 - 询问您当地的系统程序员。

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

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

可以这样想:每个物理 I/O 至少需要 2-3 毫秒。在最坏的情况下,如果您正在读取/写入的 160M 记录中的每一条都需要 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 帮助 - 请参阅这个链接 https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.icea100/gener.htm.了解更多信息。

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

但也许最重要的是,在你偶然发现正确的答案之前,你不想纯粹地尝试和犯错。如果您想学习,请熟悉 RMF 或您站点拥有的任何性能管理工具(或找到愿意与您合作的系统程序员)并深入研究。问问自己,瓶颈是什么 - 为什么这项工作运行得更快?然后找到瓶颈,修复它,然后继续下一个。这些都是需要掌握的巨大技能,一旦你了解了基础知识,它就不再像是一门黑魔法,而更像是一个你可以遵循的任何事情的系统过程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何减少 SORT 操作中的 CPU 占用 的相关文章

随机推荐

  • Rails 3:a​​ctionmailer 不使用 :from => 参数

    大家好 我正在尝试为 联系 页面运行电子邮件 并且电子邮件发送得很好 但问题是 发件人 字段不会显示我的邮件程序方法内的 from gt 下面的我的恢复密码功能也会发生同样的情况 发件人 字段中保留的电子邮件是 电子邮件受保护 cdn cg
  • 我如何在hadoop中处理大量小文件?

    我是 hadoop 新手 正在处理 wordcount 示例中的大量小文件 它需要大量的地图任务并导致我的执行速度变慢 如何减少地图任务的数量 如果解决我的问题的最佳解决方案是将小文件捕获到较大的文件 我该如何捕获它们 如果你正在使用类似的
  • 有效地生成链表的所有可能排列?

    有许多算法可用于生成给定值集的所有可能排列 通常 这些值表示为具有 O 1 随机访问权限的数组 然而 假设要排列的元素表示为双向链表 在这种情况下 您无法在 O 1 时间内随机访问列表中的元素 因此许多排列算法将经历不必要的减速 是否有一种
  • 如何找到两个序列之间的重叠并返回它

    我需要找到两个序列之间的重叠部分 重叠位于第一个序列的左端和第二个序列的右端 我希望该函数找到重叠部分并返回它 我的序列是 s1 CGATTCCAGGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTC s2 GGCT
  • putpkt:写入失败,管道损坏

    我正在使用 AdHoc 部署在 iPad 上部署我的应用程序 但收到此错误 我已经检查了 SO 中的几个问题 它们的说法相同 但解决方案始终是重新启动 XCode 重新启动 iPad 重新启动 Mac 我已经完成了所有三个操作 但此错误并未
  • 带枕头的图像上出现羽状边缘

    我试图弄清楚如何使用 Pillow 和 Python 来羽化图像的边缘 我需要像这只可爱的猫这样的东西 忽略可见的边缘 I tried im filter ImageFilter BLUR 但这不是我要找的 看看这个例子 from PIL
  • 使用 Hibernate / Spring / JUnit 设置和拆除复杂的数据库状态

    我有一个正在进行单元测试的课程 需要相当广泛的数据库设置才能运行各个测试方法 此设置需要很长时间 由于希望与当前问题无关的原因 我需要以编程方式而不是从 SQL 转储填充数据库 我遇到的问题是拆卸 如何轻松回滚数据库设置阶段所做的所有更改
  • 我可以用python生成真实的随机数吗?

    我正在学习Python的随机模块 我知道它会生成伪随机数 其核心思想是使用高频时钟作为种子 然后使用函数产生 看起来像随机数 据我所知 在现实世界中产生真实的随机数是不可能的 但我知道Unix随机数生成器引入了一些其他因素 例如鼠标移动轨迹
  • C# - ADO.NET 的一些高性能最佳实践/技巧是什么 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我决定不使用 orm 并直接在我的项目中使用 ADO NET 我知道我知道它会花费更长的时间来编程 但我只是希望页面即使在高峰时间也能高速加载
  • 声明 xsl 变量并为其赋值

    我正在开发一个使用 apache cocoon 将 XML 转换为 PDF 的应用程序 并且我正在重新设计处理输入 XML 的 XSL 目前在 XSL 中 我们有这样的代码
  • 使设置随机种子独立的函数

    有时我想编写一个随机函数 它始终为特定输入返回相同的输出 我总是通过在函数顶部设置随机种子然后继续来实现这一点 考虑以这种方式定义的两个函数 sample 12 lt function size set seed 144 sample 1
  • 更改运行 Windows 窗体程序的用户

    我用 C 编写了一个简单的 Windows 窗体程序 我希望能够输入 Windows 用户名和密码 当我单击登录按钮来运行代码时 我会以我输入的用户身份运行代码 您可以使用 WindowsIdentity Impersonate 方法来 实
  • iOS购买收据验证失败怎么办?

    iOS购买收据服务器验证通常是这样的 用户在 iPhone 上购买 您的应用程序将购买收据发送到服务器 服务器收到收据并发送给Apple进行验证 服务器从Apple获取验证结果 服务器将验证结果发送给应用程序 但如果只有第 1 步成功怎么办
  • 带填充的 Python 整数到十六进制字符串

    考虑一个整数 2 我想将其转换为十六进制字符串 0x02 通过使用python的内置函数hex 我可以获得 0x2 这不适合我的代码 谁能告诉我如何以方便的方式获得我想要的东西 谢谢 integer 2 hex string 0x 02x
  • 将 CoreData 添加到现有项目

    我正在尝试将 CoreData 添加到现有项目中并且 有奇怪的错误 我收到错误 由于未捕获的异常而终止应用程序 NSInvalidArgumentException 原因 无法创建 NSPersistentStoreCoordinator
  • 当 `git add` 操作时,“不会添加文件别名‘samefile’(‘SameFile’已存在于索引中)”

    我下载了linux的内核源代码 并且想要git add商场 When I git add git 开始添加它们 但很快它返回一个错误 fatal Will not add file alias include linux netfilter
  • 应用掩码以格式化 SQL Server 查询/视图中的字符串

    有没有一种巧妙的方法可以将掩码应用于 SQL Server 查询中的字符串 我有两张表 一张的电话号码存储为 varchar 没有文字0155567890和电话类型 其中具有该电话号码类型的掩码 返回字符串 对于合并文档 以便查询返回完全格
  • 您可以对多个泛型类型参数强制执行相同的约束吗?

    我知道你可以 你可以这样做 void M
  • 无法在 Linux 上安装 pyodbc

    我正在运行 Linux 2 6 18 164 15 1 el5 centos plus 并尝试安装 pyodbc 我正在执行 pip install pyodbc 并得到一个很长的错误列表 其结尾为 错误 命令 gcc 失败 退出状态为 1
  • 如何减少 SORT 操作中的 CPU 占用

    我正在使用 DFSORT 将磁带数据集复制到临时文件 并处理大约 80000000 条记录 仅复制数据集就需要 3 个小时 有没有其他方法可以减少CPU时间 建议将会非常有帮助 谢谢 STEP40 EXEC SORTD SORTIN DD