事實上,定義幾百個數據集並不是最適合現代z/OS系統的應用程序。每個分配都通過可預測的系統服務順序 - 目錄功能,分配功能,安全性,SMF日誌記錄等等 - 雖然確實存在細微的差異,但無論您如何做,每個分配都需要相當的時間。作爲一個經驗法則,典型的新文件分配在現代平均調整大型機上不應超過100毫秒。如果分配500個數據集花費的時間可能超過一分鐘,那麼您可能會遇到與使用IDCAMS無關的問題。
舉一個例子,你的工作可能會陷入一個低優先級的類中,一旦它消耗了一定的資源,就會耗盡資源......在這種情況下,它可能只是等待而不是被調度(一個簡單的計算的CPU時間除以經過時間會告訴你這是否是問題)。如果這是你的問題,那麼「欺騙」的一種常見方式是在JCL中定義GDG而不是通過IDCAMS ......你的JCL分配發生在批處理啓動器的優先級上,這通常比作業步驟本身更高。請記住,這意味着錯誤會導致JCL錯誤,而不是您可能從IDCAMS中的錯誤中獲得的非零返回代碼。
您可能還想檢查您的GDG基本定義 - 保留大量世代往往會減慢速度......也許您可以想出一個更好的方案來存儲更少的總代數。
要做的一件事就是確保你的系統程序員已經做好了正確調整事情的工作,尤其是目錄環境......有很多控制緩存,緩衝等參數,並且有適當的調整目錄是必不可少的,如果你想要好的表現this IBM document.有很多很好的信息大多數任務需要特殊授權,所以這可能是您自己無法處理的。
如果您實際上爲新數據集分配磁盤空間,那麼您還需要確保分配參數良好。例如,如果您將大量數據集放在同一個磁盤捲上,這將是一件壞事。分配會在卷級進行很多序列化,這意味着您可以將數據集分佈在多個磁盤捲上的次數越多,爭用的可能性就越小。您可以使用RMF之類的工具(或者您的網站可能擁有的任何供應商產品)來監控入隊延遲等 - 這通常是緩慢分配性能的罪魁禍首。
這是一個迭代過程,如果您真的想要有條不紊,請創建一個測試作業,分配一堆GDG文件並收集其上的性能統計信息。不同的分配參數和系統設置會爲您提供不同的吞吐量,您將想要回歸最佳組合而不是猜測。無論您經過多少時間,您都可以獲得CPU和I/O的服務單元計數,這些是確定最佳工作方式的最佳指南。
一旦您確信系統已正確調整且沒有不必要的延遲,下一個選擇就是您是否希望通過並行等技術更好地利用CPU利用率。你所做的主要是I/O綁定的工作,所以假設你的系統調整的很好,將你的單個作業分成多個作業,並擁有一部分文件將使用更多的處理器資源,但從運行時間觀點看法。最好的情況是當你用完處理器引擎,或者當你驅動目錄或磁盤到高利用率時。
只要您的站點允許它們並行運行(即具有足夠的批處理啓動器等等),只需將您的分配分配到多個作業中就可以實現並行的簡單路徑。如果你這樣做,並且所花費的時間並不比完成一項大型工作更好,那麼現在是時候深入研究爭論所在,正如我上面所解釋的那樣。
如果您需要一點冒險,並行執行大量分配的一個很好的方法是使用UNIX Services shell以及類似BPXWDYN而不是IDCAMS(確保將GDGNT標誌指定爲BPXWDYN)。如果正確完成,你可以編寫一個shell腳本來啓動任意數量的子進程,每個子進程都執行你的分配子集。正確配置,這具有在一個大地址空間中運行的優點,而不是需要多個地址空間才能實現並行性的批處理作業。
你是說你運行一個分配所有文件的+1版本的作業(或步驟),然後後續作業引用當前(0)代?另外,你是什麼意思「更高效」......運行時間更少,使用更少的系統資源,導致更少的目錄爭用等等。 –
@ValerieR是1個工作完成+1和所有其他工作參考0.至於第二部分您的評論。我希望它使用最少的系統資源運行,但如果可能的話,更少的目錄爭用和更短的運行時間也是很好的。 – SaggingRufus
這不是一個壞問題,但它也很容易爲自己測試。簡單地創建幾個測試工作 - 一個在單個IEFBR14或IDCAMS stap中分配500個新GDS,另一個執行相同的步驟,但是分爲100個步驟,每個分配5個GDSes。 –