SMFデータセットのアンロード(IFASMFDP)
SMFデータセットのアンロードJCLサンプル
// JOB Statement //********************************************************************* //* Sample JCL - IFASMFDP //* ===================== //********************************************************************* //IFASMFDP EXEC PGM=IFASMFDP //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=SYS1.MANX,DISP=SHR //SYSUT2 DD DSN=WORK.SMFMANX.UNLOAD,DISP=(,KEEP), // UNIT=SYSDA,VOL=SER=WORK03,SPACE=(CYL,(50,10),RLSE) //SYSIN DD * INDD(SYSUT1,OPTIONS(DUMP)) OUTDD(SYSUT2,TYPE(0:255)) //
SMFデータセットを順次データセットにアンロードします。SMFデータセット内のすべてのレコードがアンロードされます。TYPE(0:255)
入力元SMFデータセットの内容はクリアーせずにそのまま残します。ACTIVEなSMFデータセットでもアンロードは可能です。日付や時刻でアンロードするレコードを絞り込むこともできます。日付ならMVSではDATE(2008001,2008031)、MSPではDATE(080101,080131)のように制御文に追加します。
MSPではプログラム名はKDKSMFDPとなります。なおVOS3ではまったくJCLが異なりますのでSMSのマニュアルを参照して下さい。
//IFASMFDP EXEC PGM=IFASMFDP //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=SYS1.MANX,DISP=SHR //OUT1 DD DSN=WORK.SMFMANX.UNLOAD.REC30,DISP=(,KEEP), // UNIT=SYSDA,VOL=SER=WORK03,SPACE=(CYL,(50,10),RLSE) //OUT2 DD DSN=WORK.SMFMANX.UNLOAD.REC60,DISP=(,KEEP), // UNIT=SYSDA,VOL=SER=WORK03,SPACE=(CYL,(50,10),RLSE) //SYSIN DD * INDD(SYSUT1,OPTIONS(DUMP)) OUTDD(OUT1,TYPE(30)) OUTDD(OUT2,TYPE(60:69)) //
アンロードするレコードを、レコード・タイプで選択し出力先データセットを振り分けることもできます。その場合はOUTDD制御文を複数個定義し、レコード・タイプに対応した出力先DD名を指定します。
サンプルではレコード・タイプ30をWORK.SMFMANX.UNLOAD.REC30へ、レコード・タイプ60番台をWORK.SMFMANX.UNLOAD.REC60へアンロードします。
アンロード処理のパフォーマンスを上げる方法
//IFASMFDP EXEC PGM=IFASMFDP //SYSPRINT DD SYSOUT=* //SYSUT1 DD DISP=SHR,DSN=SYS1.MANX,AMP='BUFND=20' : :
SMFデータセットを定義したDD文に、AMPパラメーターでBUFNDを指定します。BUFNDはVSAMのDATAコンポーネントをアクセスするためのバッファー数です。SMFデータセットのCIサイズが4KBの場合、BUFND値に20を指定するとSMFデータセットへのI/O回数が省略時の約1/10に減少します。I/Oの減少に伴いCPU使用量もその分減少します。ELAP時間もそれらに応じて短縮できます。ただしむやみに多くしてもメモリーだけ増え効果は頭打ちになります。多くてもBUFND=50程度でしょう。
またz/OSでSMFデータセットのCIサイズが大きく設定されている場合(3390型ディスクで26KB:26624バイト)、はBUFND値は10程度で十分です。元々のCIサイズが大きいのでBUFNDを指定しなくても十分なパフォーマンスがあります。
BUFNDの指定は書き込み処理であるSMFデータセットのCLEAR時にも有効です。巨大なSMFデータセットで運用していて、ダンプ(アンロード)やクリアーの時間もばかにならない、と感じている場合は試してみて下さい。