- 「メインフレーム・コンピューター」で遊ぼう - http://www.arteceed.net -

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データセットで運用していて、ダンプ(アンロード)やクリアーの時間もばかにならない、と感じている場合は試してみて下さい。