主題のご質問をいただきました。
システム状況
状況としては最近、OSバージョンアップとシステムハードウェア移行を実施されたお客様です。IBM i の外にWebアプリケーションがあり、Db2 for i をデータベースサーバーとしてアクセスしています。
アプリケーションの改修は行っていません。いくつかのシステム設定値について、旧→新システム間で変わってしまっている可能性があります。
考察(当稿の前提)
・アプリ(外部サーバー上のJavaアプリ)は問題ないものと仮定する
・ネットワークも問題ないとする
IBM i 側に何らかの問題があると推察し進めます。
確認するべきパフォーマンスに影響あるIBM i 設定等
①TCP/IP送受信バッファーサイズ
CHGTCPA
コマンドでTCP/IPの送信バッファーサイズ・受信バッファーサイズを確認します。
例は以下です。
上記の TCPRCVBUFパラメーター と TCPSNDBUFパラメーターのデフォルトは 65535バイトです。この値は現代だと小さい事が多いように思います。例のように 最大値 8388608 (バイト)に変更 してみてください。
この設定変更は即時適用になります。
システム環境によっては試行してサイズを微調整してもいいと思います。
②JDBC/ODBCサーバージョブ QZDASOINIT の起動数を調整する
QZDASOINITは外部のWebサーバーからJDBCリクエストを受付け、処理を行います。プーリングされているので複数のジョブ(Webサーバーからの複数のリクエスト)間で共有されます。デフォルトでは2つのQZDASOINITジョブが起動しています。このとき,同時に3つ以上のJDBCリクエストが発生すると追加のQZADASOINITジョブが開始されます。この際のCPU負荷が相応に高い為、リクエスターへの処理が厳密には遅延しています。)同時実行されるリクエスト数を調べて、2よりもある程度多い場合はQZDASOINITジョブ数を増やすのがよいと思われます。
調整の方法と補足解説が こちらの記事にあります。
③データベース(テーブル)の推奨インデックスを確認する
IBM i OSバージョン(Db2 for i バージョンと同一)が上がる事でSQLエンジンが改良され、結果以前のバージョンでは不要だったインデックスが追加で必要になる場合があります。
推奨インデックスの確認方法は、Qiitaでは書いてなかったと思うのでいずれ書きたいと思いますが、
具体的な手順は SQLパフォーマンスモニターを取得し、処理の遅いSQLを特定する、そのSQLの推奨インデックスを確認する、といった流れになります。
以上は効果がある場合、1つのジョブを実行した際にも体感できるレベルで処理速度が向上する場合が多いように思います。
④エキスパートキャッシュをオンにする
エキスパートキャッシュはIBM i のメモリで未使用領域がある場合、それをディスクキャッシュとして使用する機能です。
設定・確認は
WRKSYSSTS
コマンドから実施します。
例は以下です。
WRKSYSSTSコマンドを実行し、PF11キーを複数回押すと、下記のような PAGINGオプション欄が表示されます
PAGINGオプションのデフォルトは *FIXED です。この値はエキスパートキャッシュがオフの状態です。*PAGINGオプションを CALC に変更してエキスパートキャッシュをオンにします。
この設定変更は即時適用になります。
この設定変更はメモリの割り当て状況やジョブ実行状況等いくつかの条件に影響する為、必ず効果が体感できない場合もあるかもしれません、ですが複数ジョブが実行されている状態では多少なりとも改善されるはずです。副作用もない(経験上も)ので、変更しておいて間違いない設定です。