- 论坛徽章:
- 0
|
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 编辑 ] |
|