OS/400存放和刪除SPOOL FILES的機制



看到guopeng和qingzhou等以前討論刪除splf的一個帖子,

http://bbs.chinaunix.net/viewthread.php?tid=252537&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 --=664; OUTQ --=664; 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.



狼翔月影 發表在 痞客邦 PIXNET 留言(0) 人氣()