こちらで書いたACTIVE_JOB_INFO関数のサンプルをご紹介します。
今回の例は全てIBM Document(旧IBM i インフォセンター)に記載があります。
※以下の3例のうち③のみIBM i 7.4版に記載、IBM i 7.5版ドキュメントでは消えていますが、IBM i 7.5でも使えました。
ACTIVE_JOB_INFO サンプル① : 指定したジョブ名で、ディスク使用率上位10個を抜き出す
IBM Document(インフォセンター)記載のサンプルではODBC/JDBCサーバージョブ QZDASOINITの上位10個を抜き出します。
他にも 対話型ジョブQPADEVxxxx や, ご自身の会社システムに固有のジョブ名等を使えると思います。
SELECT JOB_NAME, AUTHORIZATION_NAME, ELAPSED_TOTAL_DISK_IO_COUNT, ELAPSED_CPU_PERCENTAGE
FROM TABLE(QSYS2.ACTIVE_JOB_INFO(
JOB_NAME_FILTER => 'QZDASOINIT',
SUBSYSTEM_LIST_FILTER => 'QUSRWRK')) X
ORDER BY ELAPSED_TOTAL_DISK_IO_COUNT DESC
FETCH FIRST 10 ROWS ONLY;
むー、見事にすべてのデータが0パーセントですね。^^;実はこのコマンドは初回実行時に統計が開始されるため初回の数値は必ずゼロになります。 適切な時間をおいて再実行するとその期間の統計データを下記のように、、
値が返されました。・・・値がちっさいのは・・・テスト機で特にこの時間全く使っていないのでご了承ください…^^;
ちなみに統計をリセットするには reset-statistics パラメーターを使用します。
ODBC/JDBCジョブでテーブルに適切なインデックスが無いとテーブルスキャン(全件READ)が発生する場合があるので、その兆候を補足できると思います。
なかなか実用的なサンプルですね。
サンプル② : 活動中のジョブでテンポラリーストレージを大量使用している順にリストする
これは読んで字のごとしです。
さっそく実行してみます。
SELECT JOB_NAME, AUTHORIZATION_NAME, TEMPORARY_STORAGE, SQL_STATEMENT_TEXT
FROM TABLE (QSYS2.ACTIVE_JOB_INFO(DETAILED_INFO=>'ALL')) X
WHERE JOB_TYPE <> 'SYS'
ORDER BY TEMPORARY_STORAGE DESC;
ユーザー名のつぎに、テンポラリーストレージの使用量が表示されています。単位はおそらくMBだと思います。
ここでのポイントは(ODBC/JDBCジョブ等で)実行されたSQLステートメントも表示されている点です。 サンプル①と同様にSQLパフォーマンスの問題判別ではテンポラリーストレージのサイズを測る事が有効な場合もあると思いますので有用なサンプルだと思います。
サンプル③ : ジョブ名を ユーザー名 + ジョブ名 + 番号 に分割する
ジョブ名+ユーザー名+連番で識別されますが、OSコマンドでジョブ名を取得した際、連番/ユーザー名/ジョブ名で取得されてしまい 、ユーザーがプログラムでハンドリングするのはちょっと面倒です。
ということでOSコマンドで取得できるジョブ名を3つの要素に分解するサンプルがこちらです。
SELECT SUBSTR(JOB_NAME,1,6) AS JOB_NUMBER,
SUBSTR(JOB_NAME,8,POSSTR(SUBSTR(JOB_NAME,8),'/')-1) AS JOB_USER,
SUBSTR(SUBSTR(JOB_NAME,8),POSSTR(SUBSTR(JOB_NAME,8),'/')+1) AS JOB_NAME
FROM TABLE (QSYS2.ACTIVE_JOB_INFO()) AS X;
となりました。これならユーザープログラムでも利用しやすいと思います。これも使い勝手の良いサンプルではないでしょうか。
いろいろなところに使えるサンプルが埋もれているので、また発掘してご紹介したいと思います。