免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 17861 | 回复: 16
打印 上一主题 下一主题

OS/400存放和删除SPOOL FILES的机制 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-05 16:25 |只看该作者 |倒序浏览
OS/400存放和删除SPOOL FILES的机制

看到guopeng和qingzhou等以前讨论删除splf的一个帖子,
http://bbs.chinaunix.net/viewthr ... p;extra=&page=2

最近正好也看了点这方面东西,也来谈谈。


AS/400的许多东西实际上都是以PF文件形式存储的,比如用dsplog查看的系统历史日志实际就存放在QSYS库下以QHST开头的几个物理文件中。AS400的假脱机文件实际内容也是存在物理文件中,即存放于QSPL系统库下,随着spool file文件的增多,QSPL下的物理文件也会增多,每个物理文件都会产生很多member, 似乎每一个member就存放一个spool file文件。

我们不能直接查看QSPL的物理文件,因为其内容是有其内部格式。OS/400系统是通过建立OUTQ来查看SPOOL FILES的。实际上每个OUTQ里存放的并不是SPOOL FILES本身,而是SPOOL FILES索引,通过这个索引去读取QSPL库下的SPOOL FILES.

用WRKOUTQ OUTQ(*ALL)  命令可以看到系统所有的OUTQ, 每个OUTQ存放的都是SPOOL FILES的索引,进入每个OUTQ就可以看到该OUTQ所有SPOOL FILES的索引。这其中有两个比较重要的OUTQ:QEZDEBUG和QEZJOBLOG. 系统自己产生的OUTQ通常位于QUSRSYS和QGPL库中,用户自己也可以创建不同类型的OUTQ,用户自己创立的OUTQ可以存放于任何库中。USER PROFILE和JOBD等都可以定义输出使用的OUTQ, SBMJOB命令也可以定义输出的OUTQ.

我们常用查看SPOOL FILES命令是WRKSPLF。实际上这个命令是提供组合查询条件从各个OUTQ里选取出一组符合条件的SPOOL FILES索引,即WRKSPLF以及WRKJOB OPTION(*SPLF)等命令是建立在OUTQ基础上的一种高级包装。对于WRKSPLF通常是根据用户或USER DATA来选取。这个过程是这样的:

WRKSPLF -- OUTQ -- QSPL

我们看到SPOOL FILES最终是存在QSPL库下的一系列物理文件的一个个member中。
通常我们删除spool files是在WRKSPLF或WRKOUTQ里用4选项(若没指定OUTQ需用5先进入),也可以用DLTSPLF按照条件删除。或者用CLROUTQ删除某一个OUTQ下的所有的SPOOL FILES的索引。每个SPOOL FILE与QSPL库下某个文件的一个member相连,以上删除动作并没有删除QSPL库下相关的文件member, 只是清空该member的内容,该member存储空间仍然被占据,这个被清空的member可以被新产生的spool file所重新使用。重新使用旧的member相比与产生新的member能够提高作业性能。此所谓以牺牲空间换时间。这个意思是当我们用 WRKSPLF,WRKOUTQ,DLTSPLF,CLROUTQ等命令删除大量SPOOL FILES,硬盘空间占用率并不会有变化。

OS/400提供了另外一个命令RCLSPLSTG来回收删除spool files的空间。这个命令有个days参数,它的意思是如果在指定N天的时间内,那些被清空的member还没有被重新使用,则系统删除该member,回收释放该member所占据的存储空间。比如今天删除了一些spool files文件,存储空间并没有被释放,如果执行RCLSPLSTG DAYS(4)命令,则4天后系统如果发现4天前删除的spoole files所使用的member并没有被新产生的spool files重新使用,则删除该member,释放空间,反之如果发现被重新使用,则不作任何动作。Days参数如果填*NONE, 则表示立即删除所有已经删除spool fles索引的那些member, 这样的话将不会留任一个空的member供新的spool file使用。

理论上我们可以直接删除QSPL下的物理文件,但是这样一来我们不知道删除了哪些spool files. 而且在outq里的那些索引仍然存在。这就是一个麻烦。如果发生这种情况,需要停止所有writes和QSPL子系统,然后运行CALL QSPFIXUP来修补。

实际上OS/400系统提供了自动回收功能来回收删除spool files的空间。这个自动功能是通过QSPLMAINT系统作业来实现的。可能是该系统作业调用RCLSPLSTG命令来实现的,而days参数则是定义在QRCLSPLSTG这个系统值里的,缺省天数是8天。适当调整这个系统值以获取系统空间和作业时间的平衡。

用WRKACTJOB可以查看到该QSPLMAINT系统作业,用5进去后查看joblog,通常我们可以看到这样类似内容:
Unused storage for 96 spooled files was reclaimed.   
Unused storage for 1420 spooled files was reclaimed.  
Unused storage for 5 spooled files was reclaimed.     
Unused storage for 21 spooled files was reclaimed.   
Unused storage for 231 spooled files was reclaimed.   

这样的话,我们就应该定期检查和清除那些OUTQ里的已经不需要的SPOOL FILES. 如果要想实现自动化清理一个时间间隔以前的SPOOL FILES. 恐怕需要用编程来实现。OS/400也提供了一套操作SPLOOL FILES的API, 比如QUSLSPL这个API,就类似于WRKSPLF或者WRKJOB OPTION(*SPLF), 研究这些函数,读取SPOOL FILES的产生时间,与当前时间比对就可以决定是否删除该spool file.

2006.07.05

[ 本帖最后由 blogliou 于 2006-7-6 08:55 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-07-05 16:32 |只看该作者
精彩

论坛徽章:
0
3 [报告]
发表于 2006-07-05 16:55 |只看该作者
这么好的帖子,一定要顶

论坛徽章:
0
4 [报告]
发表于 2006-07-05 17:17 |只看该作者
感激的想哭,每天期待您的帖子!

论坛徽章:
0
5 [报告]
发表于 2006-07-05 17:21 |只看该作者
对V5R4 情况有所不同, spool file 可以从job上de-attach 下来。

论坛徽章:
0
6 [报告]
发表于 2006-07-06 02:43 |只看该作者
太精彩了,通俗易懂的好文!明白不少原理,谢谢!

论坛徽章:
0
7 [报告]
发表于 2006-07-06 08:33 |只看该作者
好,保留啦。

论坛徽章:
0
8 [报告]
发表于 2006-07-06 09:19 |只看该作者
好贴!

论坛徽章:
0
9 [报告]
发表于 2006-07-06 16:59 |只看该作者
呵呵,想起几年前还不太明白SPOOL FILE的原理,备份了OUTQ,然后清了SPOOL FILE,结果发现备的只是索引,只能再次跑一大堆程序。

论坛徽章:
0
10 [报告]
发表于 2007-10-30 17:05 |只看该作者

以资源共享为荣

谢谢楼主喽,恩恩!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP