2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM i Services Directory : QSYS2.ACTIVE_JOB_INFO テーブル関数のサンプル2

Last updated at Posted at 2024-06-02

こちらで書いた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;

実行例はこちらです。
image.png

むー、見事にすべてのデータが0パーセントですね。^^;実はこのコマンドは初回実行時に統計が開始されるため初回の数値は必ずゼロになります。 適切な時間をおいて再実行するとその期間の統計データを下記のように、、
image.png

値が返されました。・・・値がちっさいのは・・・テスト機で特にこの時間全く使っていないのでご了承ください…^^;
ちなみに統計をリセットするには 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;

実行結果は下記です。
image.png

ユーザー名のつぎに、テンポラリーストレージの使用量が表示されています。単位はおそらくMBだと思います。
ここでのポイントは(ODBC/JDBCジョブ等で)実行されたSQLステートメントも表示されている点です。 サンプル①と同様にSQLパフォーマンスの問題判別ではテンポラリーストレージのサイズを測る事が有効な場合もあると思いますので有用なサンプルだと思います。

サンプル③ : ジョブ名を ユーザー名 + ジョブ名 + 番号 に分割する

ご存じのようにIBM i上で全てのジョブは 下記例のように
image.png

ジョブ名+ユーザー名+連番で識別されますが、OSコマンドでジョブ名を取得した際、連番/ユーザー名/ジョブ名で取得されてしまい 、ユーザーがプログラムでハンドリングするのはちょっと面倒です。
image.png

ということで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;

実行結果は、
image.png

となりました。これならユーザープログラムでも利用しやすいと思います。これも使い勝手の良いサンプルではないでしょうか。

いろいろなところに使えるサンプルが埋もれているので、また発掘してご紹介したいと思います。

2
0
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?