それではいよいよパフォーマンスのモニターを開始しよう。
コマンド入力行にセッション ID: AUTOWEB に対して
STRPEX SSNID(AUTOWEB) DFN(AUTOWEB) + [実行キー]
何もエラーが出力されなければモニター開始は OK である。
実際にプログラムを操作させてみる。
改善効果を調べるには改善テストのために繰り返す操作は同じ操作に
しなければならない。
後でパフォーマンス報告書の内容を改善前と後を比較してみても
同じ操作で比較しないと比較にならないからである。
コマンド入力行において
ENDPEX SSNID(AUTOWEB) RPLDTA(*YES) + [実行キー]
でモニターを終了する。
PRTPEXRPT MBR(AUTOWEB) TYPE(*PROFILE) PROFILEOPT(*SAMPLECOUNT *PROCEDURE) TASKINF(*NONE)
によって報告書を印刷する。
次が報告書の一部である。
PERFORMANCE EXPLORER 報告書 : ヒストグラム ヒット ヒット CUM 開始 マップ STMT 名前 CNT % % アドレス フラグ 番号 ***************** 208 47.7 47.7 37813A914E009A80 SS 11 VTBASE5_D VTBASE5/IsWEBENV **** 51 11.7 59.4 0D6A29F521019F88 SS 0 VT5250_D VT5250/Data * 22 5.0 64.4 032B8EC71A013894 SS 21 CVT5250_D CVT5250/setItem * 18 4.1 68.6 032B8EC71A010AEC SS 16 CVT5250_D CVT5250/replace_ 11 2.5 71.1 032B8EC71A021920 SS 44 CVT5250_D CVT5250/setText 9 2.1 73.2 37813A914E011C78 SS 0 VTBASE5_D VTBASE5/to_UTF8sub 8 1.8 75.0 032B8EC71A00F7EC SS 1 CVT5250_D CVT5250/memstr 8 1.8 76.8 032B8EC71A0352D0 SS 146 CVT5250_D CVT5250/sendHTML 7 1.6 78.4 37813A914E011610 SS 3 VTBASE5_D VTBASE5/doIconvSISO 6 1.4 79.8 0D6A29F52102A95C SS 92 VT5250_D VT5250/receiveDisplay 6 1.4 81.2 032B8EC71A02D95C SS 0 CVT5250_D CVT5250/Data 5 1.1 82.3 37813A914E01D754 SS 0 VTBASE5_D VTBASE5/from_UTF8sub 4 0.9 83.3 032B8EC71A036398 SS 11 CVT5250_D CVT5250/Cvt5250 4 0.9 84.2 37813A914E011B1C SS 2 VTBASE5_D VTBASE5/doIconv 4 0.9 85.1 37813A914E009808 SS 0 VTBASE5_D BINDERGLUEMOD/_BN_EXT_CAL 4 0.9 86.0 37813A914E00EFFC SS 0 VTBASE5_D VTBASE5/getColorCode 4 0.9 86.9 032B8EC71A013504 SS 3 CVT5250_D CVT5250/calcDDSFieldPos 4 0.9 87.8 032B8EC71A00E994 SS 0 CVT5250_D BINDERGLUEMOD/_BN_EXT_CAL 3 0.7 88.5 032B8EC71A01E394 SS 0 CVT5250_D CVT5250/nextDynamicTag 3 0.7 89.2 032B8EC71A032DD8 SS 38 CVT5250_D CVT5250/addMenuItem 2 0.5 89.7 0D6A29F5210155D4 SS 23 VT5250_D VT5250/FieldStart 2 0.5 90.1 37813A914E010FEC SS 16 VTBASE5_D VTBASE5/RtvDspfFkeys 2 0.5 90.6 37813A914E0124BC SS 1 VTBASE5_D VTBASE5/to_UTF8 2 0.5 91.1 0D6A29F52102D224 SS 75 VT5250_D VT5250/main 2 0.5 91.5 37813A914E00F2C4 SS 4 VTBASE5_D VTBASE5/GetWEBENV 2 0.5 92.0 29E10FAB6F004E88 SS 211 RTVDSPKW_D RTVDSPKW/getFieldInfo 2 0.5 92.4 0D6A29F5210145E8 SS 0 VT5250_D VT5250/InsertCursor 2 0.5 92.9 032B8EC71A01BD54 SS 227 CVT5250_D CVT5250/setField 2 0.5 93.3 032B8EC71A019F7C SS 0 CVT5250_D CVT5250/createFLDStyle 1 0.2 93.6 37813A914E021730 SS 25 VTBASE5_D VTBASE5/to_ASCID 1 0.2 93.8 032B8EC71A02AC78 SS 0 CVT5250_D BINDERGLUEMOD/_BN_EXT_CAL 1 0.2 94.0 032B8EC71A010898 SS 0 CVT5250_D BINDERGLUEMOD/_BN_EXT_CAL 1 0.2 94.3 032B8EC71A00DB7C SS 67 CVT5250_D CVT5250/INZSR
この報告書で重要であるのは ヒット% という欄であり最上位の「VTBASE5 / IsWEBENV」
つまり VTBASE5 という名前のサービス・プログラムの IsWEBENV という関数の実行に
全体の 47.7% の時間が費やされていることがわかる。
端的に言えば実行時間の約半分近くが IsWEBENV という関数の処理に費やされている
ことになる。
そこでこの後 IsWEBENV の内部処理のパフォーマンス・チューニングを行ったところ
大幅な時間短縮を計ることができました。
さらに再統計して次々と問題のある関数を発見してパフォーマンスを向上させることに
成功した。
このパフォーマンス監視リストを利用することによって開発者の感覚的なものに
頼るのではなく具体的にパフォーマンスに問題のある関数(プロシージャー)を
数字を示して抽出できたことは科学的なアプローチによるパフォーマンス・チューニング
であると言える。
この方法にパフォーマンス・チューニングによる効果は大きくプログラム・ロジックを
変えずにパフォーマンスだけを向上させることができるのだからこれほどよい手法はない。
最後にこの例は弊社の C 言語によるプログラムで実験した結果であるが ILE-RPG でも
同じような結果が得られるはずである。
現在の WRKACTJOB の実行スタックは ILE のプロシージャー単位が実行スタックである。
ILE-RPG が発表されたのは何と 15 年以上前の Ver3.2 のころである。
RPG Ⅲ の資産が多いのは理解できるが新規の開発はやはり ILE-RPG とすべきだろう。