使用 RTVDSKINF 命令避免 IBM i 上的磁盘存储灾难

如何利用标准控制语言命令缓解存储限制上的忧虑

IBM® 为 IBM i 操作系统引进更大、更快的技术已经超过 20 年,但仍然有一些必须注意的数据文件限制。此类限制之一就是库中的最大对象数量。达到限制会违反备份策略,在最简单的过程中也会导致极高的延迟。您应该如何为自己提供这种潜在危机的警报呢?幸运的是,操作系统始终为您提供了必要的工具。本文将讨论如何利用检索磁盘信息命令 (RTVDSKINF) 收集有关 IBM i 中库的信息,并创建能够跟踪对象数量过多的库的清单。本文还将介绍创建查询来分析 RTVDSKINF 过程中数据的技巧。

Eduardo Delgado, 顾问, IBM

Eduardo Delgado 担任 IBM 系统工程师已有 14 年的时间,他是加利福尼亚州 Santa Monica 办公室的一名 AS/400 和 iSeries 专家。他为 IBM 客户提供支持,也为 IBM 市场营销代表提供技术支持。自 1994 年以来,他一直以自由顾问的身份为依靠 AS/400 和 iSeries 平台运转其业务的客户提供支持。他协助 IT 人员进行系统操作与管理,并为硬件和软件升级提供规划和安装支持。



2012 年 12 月 05 日

常见库问题分析

和许多悲惨的故事一样,这个故事也是始于无知。我收到了在客户的 IBM i 系统上执行灾难恢复审计的任务,重点关注其当前磁带备份数据库。我运行了显示备份清单命令 (DSPBCKUPL),这无疑是该操作系统中最有用也是最常被低估的命令,可用它来打印库清单。这条命令非常适合用来确定某个库的最后完整保存时间,以及此后该库中是否有任何对象发生了变化。我注意到一个 SXDATA 库,这个库自 2009 年 7 月起从未保存过!

我这位客户的备份例行程序要求每天晚上使用保存库命令 (SAVLIB) 保存全部 用户库。该库 应被跳过,客户和我在备份程序中找不到排除该库的任何忽略语句。令所有人感到不安的是,我们发现这个库中包含一些重要数据,和许多年来的维修发票记录。毫不夸张地说,IBM i 如此之高的可靠性令我们松了一口气,因为任何备份磁带中均未包含该库。任何机房的灾难,需要恢复系统会导致业务面临窘境,因为这个库必将永久丢失。

我们检查了备份的历史记录日志和作业日志,但均未发现确凿证据。我们只看到了这样一条含义不明的消息:

CPF3770  Diagnostic   No objects saved or restored for library SXDATA

这并不是在备份中忽略几个受损对象那样简单。而是跳过了整个 库。更糟糕的是,经过证明,库内容无法正常显示。DSPLIB SXDATA 这样的命令似乎会进入循环,在 40 分钟之后,我们失去了继续等待响应的耐心。我们之所以知道数据存在,是因为访问文件的程序一直工作正常。我们只是无法处理库。若尝试使用 “活动时保存” 特性来保存库本身,则会导致相同的诊断消息。这条错误消息如此不引人注意也令我们感到惊讶。带有一点紧迫感的消息文本 Hey, you just skipped a COMPLETE library! 应该更受欢迎。

幸运的是,在发现该库存在问题之后,我们可以对问题进行诊断。我们不知不觉中超出了IBM i系统限制的大小。在库中有一个模糊的对象的数量限制,在接近此限制时,就会发生无法预测的后果。根据 IBM i 信息中心所述,这个限制大约为 360,000 个对象。接近此限制的后果就是无法保存库,无法显示库内容清单。在编程团队的协助下,我们删除了足够多的对象,解决了问题;避免了与墨菲定律的 “亲密接触”。

了解限制的重要性

上面描述的这个问题开拓了我的眼界,令我开始关注可能潜伏在许多 IBM i 系统中的问题。系统越来越庞大,创建和在线维护的数据越来越多。20 世纪 80 年代和 20 世纪 90 年代早期,几乎没有 IBM AS/400® 能有超过1TB 的磁盘空间。。时至今天,即便对基于 IBM POWER7® 处理器的最小规模的系统来说,这种空间大小已经是再寻常不过。除此之外,还有一些系统已经使用了数十年,数据堆积如山。因此,您需要更加谨慎地对待文件和数据库限制,以避免各种问题,这可能包括从不完整的备份到受损的性能再到不可预知的结果。。

IBM 在当前支持版本(V5R4、V6R1 和 V7.1)的相应信息中心内记录了这些限制。参考资料 部分提供了链接,图 1 显示了主要限制。

图 1. IBM i 7.1 的重要文件系统限制
IBM i 7.1 信息中心记录的文件系统限制

请注意,这个表格来自信息中心的两个部分。文件系统限制来自 “可用性” 章节,而数据库文件大小限制则来自 “编程” 一节。


文件接近限制时很难获得警报

系统在达到已用总磁盘空间阈值时会生成警告消息(通常是在已用磁盘空间达到 90% 时)。然而,在单个库或数据文件接近其限制时,似乎不存在类似的警报。因此,系统管理员需要跟踪库和数据库文件的增长情况。如果能了解麻烦近在眼前,您就可以采取相应措施来减少对象数量,避免问题的实际发生。幸运的是,操作系统内有一些工具可以帮助您实现这个目标。


利用 RTVDSKINF 命令收集磁盘使用情况数据

只要跟踪 IBM i 中存储的对象,观察其增长情况,确定其是否接近 IBM i 的限制,即可解除对于备份不完整的担忧。表 1 列举了需要观察的主要指标。

表 1. IBM i 中需要观察的主要指标
指标建议
总体磁盘空间使用情况保持在 70% 以下,以便获得最佳性能。为实现良好的容量管理,当必需做一个磁盘升级或数据归档时候,信息技术(IT)部门应该跟踪这一指标来做相应的预测。
各库的总大小查看哪些库占用的空间最多或者增长速度最快。
对象总数查看哪些库的对象数量最多。请注意几个里程碑,例如 150,000、200,000 和 250,000 个对象,以避免出现本文开头处所述的问题。

RTVDSKINF 命令的特征

RTVDSKINF 命令:

  • 无法作为交互式命令运行。必须将其作为批处理作业提交。
  • 需要一个具有 *ALLOBJ 权限的用户配置文件才能成功运行。
  • 将收集到的数据存储在 QUSRSYS/QAEZDISK 文件中。每次运行 RTVDSKINF 时,都会用它来替换这个文件。

IBM 警示,此命令可能需要数个小时的时间才能完成。我的系统是一台 IBM System i5 9406-550 型号,配有 1.2 TB 的磁盘,RTVDSKINF 用了大约 20 分钟的时间完成此命令。

没有任何命令可以显示 一个库的总大小,尽管显示库DSPLIB命令可以提供一个总数,如果你选择打印选项。据说,IBM一直提供一个优秀的工具来一次性的收集所有的库信息:RTVDSKINF命令。

必须将 RTVDSKINF 作为批处理作业提交,但它在系统管理方面扮演着重要的角色。它将收集 IBM i 中所有对象的数据(重点关注库对象),并将这些数据存储在 QUSRSYS 库内的 QAEZDISK 文件中。您可以使用打印磁盘信息命令 (PRTDSKINF),以报告的形式显示这些信息。此报告将提供各种类型的对象占用的空间总量(参见 图 2)。

图 2. PRTDSKINF 报告 — 系统汇总
RPRTDSKINF 报告 — 系统汇总

在这个例子中,可以看到用户库(即并非由 IBM 软件产品使用的库)占用了 71.35% 的磁盘空间。集成文件系统 (IFS) 中的用户目录则占用了 4.69%。运行 PRTDSKINF 命令时,根据 20.13% 这个未用空间比例值,即可得出已经占用的磁盘空间总数为 79.87% 的结论。

根据您在 PRTDSKINF 命令中使用的值,该命令将显示所有库的清单及其总大小(参见 图 3)。

图 3. PRTDSKINF RPTTYPE(*LIB) 命令给出的磁盘报告中的库部分
PRTDSKINF RPTTYPE(*LIB) 命令给出的磁盘报告中的库部分

创建一个文件用来存储从每次 RTVDSKINF 进程创建一个包含数据的文件过程中获得的数据: 一个SQL示例

在报告中显示数据固然很好,但您也会希望将这些信息保存到文件中,在后续每次运行 RTVDSKINF 命令时添加数据。随后,您可以挖掘这些数据,显示各库内的对象增长情况,长时间关注总体磁盘空间占用情况。

这之所以成为一项挑战,是因为 RTVDSKINF 每次运行时都会覆盖 QAEZDISK 文件。因此,您需要建立一个新文件,存储来自各 RTVDSKINF 进程的数据和一个日期字段。您可以使用高级语言,但简单的 Query/400 程序也可以实现此目标。

在完成 RTVDSKINF 作业后,可以使用结构化查询语言 (SQL) 语句从 QAEZDISK 文件中提取和汇总数据。清单 1 显示了一条创建表(称为 EDLIB/EDDISKDATA)来根据 QAEZDISK 文件格式保存此数据的语句。

清单 1. 样例 SQL CREATE 语句,用于设置保存数据的表
 CREATE TABLE EDLIB/EDDISKDATA (LIBRARY_NAME , 
OBJECT_COUNT , TOTAL_OBJECT_SIZE , DATE) AS 
(SELECT diobli, count(diobnm), sum(diobsz), current date 
FROM qusrsys/qaezdisk  WHERE diobli <> ' ' 
GROUP BY diobli ORDER BY diobli) 
WITH NO DATA

清单 2 显示了从最后一次 RTVDSKINF 作业收集数据并将其插入新文件的语句。

输入字段如下:

  • diobli(库名称)
  • diobnm(对象名称)
  • diobsz(对象大小)
  • current date(插入当前日期)
清单 2. 选择数据并定期将数据添加到表的样例 SQL
INSERT INTO edlib/eddiskdata                                
SELECT diobli, count(diobnm), sum(diobsz), current date 
FROM 
qusrsys/qaezdisk                                             
WHERE     DIOBLI <> ' '                                      
GROUP BY diobli ORDER BY diobli

图 4 包含这些过程得出的数据结果示例。

图 4. EDDISKDATA 文件的输出示例
SQL 语句的示例数据

创建一个文件用来存储从每次 RTVDSKINF 过程中获得的数据 — Query/400 示例

下面是一个 Query/400 定义示例,它将在 RTVDSKINF 批处理作业完成后启动。它从集合中聚集数据记录并将它们添加到一个文件以便数据积累。

  1. 将 QUSRSYS 库中的 QAEZDISK 选作源文件(参见 图 5)。

    图 5. 选择 QAEZDISK 作为源文件
    选择 QAEZDISK 作为源文件
  2. 创建一个名为 TODAY 的新字段,其中包含当前日期;随后将此字段添加到各记录(参见 图 6)。

    图 6. 创建一个包含当前日期的新字段
    创建一个包含当前日期的新字段
  3. 选择以下字段,以便在新文件中使用它(参见 图 7):

    • 对象库
    • 对象
    • 对象类型
    • 对象大小
    • 最后更改日期
    • 最后使用日期
    • 对象状态
    • 当前(日期)
    图 7. 选择要在新文件中使用的字段
    选择将要在新文件中使用的字段
  4. 指定新文件按库名称排序(参见 图 8)。

    图 8. 按库名称排序文件
    按库名称排序文件
  5. 为报告指定以下汇总功能(参见 图 9):

    • 对象计数(用以获取库中的总数)
    • 对象大小总计(用以获取库的总大小)
    图 9. 为报告指定汇总功能
    为报告指定汇总功能
  6. 为对象库和当前(日期)字段定义报告间断(参见 图 10)。

    图 10. 定义报告间断
    定义报告间断
  7. 指定输出记录将存放在一个数据库文件之中,并以 Summary only 作为输出格式(参见 图 11)。这意味着您将仅捕获以下字段:

    • 对象库
    • 对象(仅总数)
    • 对象大小(仅总数)
    • 当前(日期)
    图 11. 指定将 存放在数据库文件中的输出记录
    指定将存放在数据库文件中的输出记录
  8. 将最新数据记录添加到现有文件成员(参见 图 12)。这就意味着您将汇总各 RTVDSKINF 作业的数据。在本例中,包含数据的文件是 EDLIB/EDDISKDATA。

    图 12. 将数据记录添加到当前文件
    添加数据记录

您可以选择特定库记录、将日期格式化为 yymmdd 格式,使之更易于排序,从而使查询更加清晰可读。

运行此查询(或类似的程序)之后,您可以将更新后的文件下载到电子表格中,以便进行分析(参见 图 13)。

图 13. 每周的库数据库电子表格 — 允许筛选
每周的库数据库电子表格 — 允许筛选

使用 Microsoft® Office Excel 数据透视表,可以将此数据存放到一个图表中,显示库大小的长期变化(参见 图 14)。

图 14. 显示特定库大小的每周变化的图表
显示特定库大小的每周变化的图表

相同数据表的另外一个视图显示了各库中的对象总数(参见 图 15)。

图 15. 经过一段时间后包含对象数量最多的库
经过一段时间后包含对象数量最多的库

点击查看大图

图 15. 经过一段时间后包含对象数量最多的库

经过一段时间后包含对象数量最多的库

现在,您已经实现了在单独一个文件内维护此数据,接下来就可以使用更为复杂的程序来查找特定标准。举例来说,您可以扫描文件,查找对象总数超过 200,000 个的库,或者每周大小的增长超过 10% 的库。如果满足此类条件,您可以发送警报电子邮件或操作者提示,让 IT 支持部门能够随时掌握情况,在达到大小限制时做好准备。


使用 SYSPARTITIONSTAT 视图监视文件

尽管 RTVDSKINF 命令非常有用,但它不会捕获一个物理文件内当前记录或成员数量的相关信息。如前文所述,这些属性在 IBM i 内也存在相应的限制。您可以利用类似于库大小的方法来维护物理文件成员。在本例中,您可以对 QSYS2/SYSPARTITIONSTAT 视图运行一条 SQL SELECT 语句,获取有关物理文件内成员的实时信息。清单 3 给出了一个示例。

清单 3. 从 QSYS2/SYSPARTITIONSTAT 视图中提取数据的 SQL 语句
 SELECT table_schema, table_name,
number_rows, data_size, table_partition FROM syspartitionstat WHERE table_schema =
'QGPL'

IBM 在 IBM i 的 V5R4 版本中引入了 SYSPARTITIONSTAT 视图。该视图使您能够轻而易举地检索一个成员的记录数量,无需事先运行显示文件描述命令 (DSPFD) 将成员信息复制到输出文件。

此 SQL 查询的结果(参见 图 16)包括多条数据记录,其中包含:

  • TABLE_SCHEMA(类似于库名称)
  • TABLE_NAME(类似于物理文件名称)
  • TABLE_PARTITION(类似于成员名称)
  • NUMBER_ROWS(类似于记录数量)
  • DATA_SIZE(表分区的大小)
图 16. 对 SYSPARTITIONSTAT 视图执行 SQL 语句的结果
对 SYSPARTITIONSTAT 视图执行 SQL 语句的结果

您可以在一条查询内使用所有这些方法来监视长期汇总的记录数量和成员数量。


结束语

显而易见,您不能轻易解除IBM这个对文件和数据库的限制。。幸运的是,您可以利用各种工具,获取有关文件和库增长情况的信息。即使您的系统是远离大小限制,这些工具仍然提供了管理存储容量的出色方法。

参考资料

学习

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=IBM i
ArticleID=848671
ArticleTitle=使用 RTVDSKINF 命令避免 IBM i 上的磁盘存储灾难
publish-date=12052012