如何计算记录数的空间

问题描述

我正在尝试使用以下公式计算数据集所需的空间,但是当我将它与系统中的现有数据集进行交叉检查时,我在某处出错。请帮帮我

一个数据集: 记录格式。 . . : VB
记录长度。 . . :445
块大小。 . . . : 32760 记录数....: 51560

Using below formula to calculate
optimal block length (OBL) = 32760/record length = 32760/449 = 73
As there are two blocks on the track,hence (TOBL) = 2 * OBL = 73*2 = 146

Find number of physical records (PR) = Number of records/TOBL = 51560/146 = 354

Number of tracks = PR/2 = 354/2 = 177

But I can below in the dataset information

 Current Allocation            
  Allocated tracks  . : 100    
  Allocated extents . : 1      
                               
 Current utilization           
  Used tracks . . . . : 100    
  Used extents  . . . : 1   

第二个数据集: 记录格式。 . . : VB
记录长度。 . . :445
块大小。 . . . :27998
记录数....:127,252

Using below formula to calculate
optimal block length (OBL) = 27998/record length = 27998/449 = 63
As there are two blocks on the track,hence (TOBL) = 2 * OBL = 63*2 = 126

Find number of physical records (PR) = Number of records/TOBL = 127252/126 = 1010

Number of tracks = PR/2 = 1010/2 = 505

Number of Cylinders = 505/15 = 34

But I can below in the dataset information

 Current Allocation         
  Allocated cylinders : 69  
  Allocated extents . : 1   
                            
 Current utilization        
  Used cylinders  . . : 69  
  Used extents  . . . : 1   

解决方法

对您的方法的一些观察。

首先,由于您处理的是可变长度的记录,因此了解“平均”记录长度会很有帮助,因为这有助于制定更准确的存储预测。您的方法假设所有记录都处于最大值的最坏情况,这对于计划来说是好的,但实际上,如果记录长度的平均值低于最大值,您可能会看到实际分配会更低。

您采用的方法是合理的,但考虑到您可以将块、记录、DASD 几何结构中的空间要求通知 z/OS,或者让 DFSMS 代表您执行计算。请参阅此 article 以获取有关选项的其他信息。

回到你的计算:

您的最佳块长度 (OBL) 实际上是每块记录 (RPB) 的数量。块大小除以最大记录长度得出可以存储在块中的全长记录数。如果您的平均记录长度较短,那么您可以在每个块中存储更多记录。

每个轨道有两个块的假设对于您的情况可能是正确的,但这取决于将用于基础分配的实际设备类型。这是支持的 DASD 设备及其几何结构的一些几何结构的 link

enter image description here

您对每个轨道两个块的假设取决于设备对于 3390 是不正确的,因为您需要 64k 在轨道上的两个块,但是您可以看到 3390 的最大输出为 56k,因此每个轨道只能获得一个块在设备上。

此外,看起来您确实通过添加 4 个字节将 RDW 因素考虑在内,但是如果有人不熟悉 z/OS 上的 V 记录,那么查看问题的人可能会感到困惑。在您的计算中,这将是 61每个块的记录数为 27998(这是“最佳块长度”,因此两个块可以舒适地放在轨道上)。

我将使用以下值:

  • 最大记录长度 = 记录长度 + 4 用于 RDW

  • TotalRecords = 最大长度时的总记录数(最坏情况)

  • 块大小 = 建模块大小

  • RecordsPerBlock = 一个块中可以容纳的记录数(最坏情况)

  • BlocksNeeded = 包含估计记录所需的块数(最坏情况)

  • BlocksPerTrack = 来自 IBM 设备几何信息

  • TracksNeeded = TotalRecords / RecordsPerBlock / BlocksPerTrack 圆柱数 = 每个圆柱体的设备轨道数(大多数设备为 15 个)

Example 1:

  Total Records = 51,560
  BlockSize = 32,760
  BlocksPerTrack = 1 (from device table)
  RecordsPerBlock: 32,760 / 449 = 72.96 (72)
  Total Blocks = 51,560 / 72 = 716.11 (717)
  Total Tracks = 717 * 1 = 717
  Cylinders = 717 / 15 = 47.8 (48)

Example 2:

  Total Records = 127,252
  BlockSize = 27,998
  BlocksPerTrack = 2 (from device table)
  RecordsPerBlock: 27,998 / 449 = 62.35 (62)
  Total Blocks = 127,252 / 62 = 2052.45 (2,053)
  Total Tracks = 2,053 / 2 = 1,026.5 (1,027)
  Cylinders = 1027 / 15 = 68.5 (69)

现在,至于实际分配。这取决于您如何分配空间,记录的大小。假设它在 JCL 中,您可以使用 RLSESPACE= 子参数在创建和关闭时释放空间。这应该会释放未使用的资源。

鉴于记录是V可变的,估计是最坏的情况,您需要更多地了解平均记录长度,以了解实际使用空间方面的实际分配。

最后的想法是,您的存储管理员可以通过 ACS 例程覆盖您正在执行的所有工作。我相信今天大多数人会指定一个 BLKSIZE=0 并让 DFSMS 来完成所有艰苦的工作,因为该组件有更多关于文件将去哪里、底层设备是什么以及最有效的分配方式的信息.磁盘几何和分配的日子更像是一场篝火晚会,除非您的环境没有被管理来为您做这些事情。

,

与其尝试计算磁道或柱面,不如计算 MB 或 KB。 z/OS (DFSMS) 会为您计算需要多少磁道或柱面。

在 JCL 中,一旦你掌握了它,它就不是直截了当的,也不是太复杂。

有一个DD语句参数叫AVGREC=,就是触发器。让我为上面的第一个案例举一个例子:

//anydd   DD DISP=(NEW,CATLG),//           DSN=your.new.data.set.name,//           REFCM=VB,LRECL=445,//           SPACE=(445,(51560,1000)),AVGREC=U
//*                  |     |     |           |
//*                  V     V     V           V
//*                 (1)   (2)   (3)         (4)

参数AVGREC=U (4) 告诉系统三件事:

  • 首先,SPACE= (1) 中的第一个子参数应解释为平均记录长度。 (注意该值完全独立于 LRECL= 中指定的值。)
  • 其次,它告诉系统,第二个 (2) 和第三个 (3) SPACE= 子参数是数据集的平均长度 (1) 记录数应该能够存储。
  • 第三,它告诉系统数字 (2) 和 (3) 在记录 (AVGREC=U) 中。备选方案是千 (AVGREC=M) 和数百万 (AVGREC=M)。

因此,此 DD 语句将分配足够的空间来保存估计的记录数。您不必关心磁道容量、块容量、设备几何形状等。

给定您期望的记录数和(平均)记录长度,您可以轻松计算出您需要的千字节或兆字节数。不幸的是,您不能在 JCL 中直接指定 KB 或 MB,但有一种使用 AVGREC= 的方法,如下所示。

您的第一个数据集将获得 51560 条(最大)长度为 445 的记录,即 22'944'200 字节,或 ~22'945 KB,或 ~23 MB。以 KB 为单位的分配的 JCL 如下所示:

//anydd   DD DISP=(NEW,//           SPACE=(1,(22945,10000)),AVGREC=K
//*                 |    |     |            |
//*                 V    V     V            V
//*                (1)  (2)   (3)          (4)

您希望系统为 22945 (2) 千 (4) 条长度为 1 字节 (1) 的记录分配主空间,即 22945 KB,并为 10'000 (3) 千 (4) 条记录分配辅助空间长度 1 字节 (1),即 10'000 KB。

现在指定 MB 的相同分配:

//anydd   DD DISP=(NEW,(23,10)),AVGREC=M
//*                 |   |  |          |
//*                 V   V  V          V
//*                (1) (2)(3)        (4)

您希望系统为 23 (2) 百万 (4) 条长度为 1 字节 (1) 的记录分配主空间,即 23 MB,并为 10 (3) 百万 (4) 条长度为 1 的记录分配辅助空间字节 (1),即 10 MB。

除了后者,我很少使用其他任何东西。

在 ISPF 中,它更容易:数据集分配 (3.2) 允许以 KB 和 MB 作为空间单位(在所有旧的单位中)。