ファイル、プログラムをメモリー上に常駐させる事によりパフォーマンスを向上
OS/400にはSETOBJACCというコマンドがあります。
このコマンドを使用すると目的のオブジェクト(ファイルまたはプログラム)を明示的にメモリー上にロードする事が可能です。(あるいはその反対に明示的にオブジェクトをメモリー上から除去する事も可能です。)
例えば、バッチ処理において使用する大容量のファイル(物理ファイル・論理ファイル)をバッチ処理実行の前にSETOBJACCコマンドでメモリー上にロードすることにより、処理時間を大幅に短縮する事も可能です。
SETOBJACCコマンドの有効なオブジェクト
SETOBJACCコマンドでメモリー上に展開(またはメモリー上から除去)できるオブジェクト・タイプは以下の通りです。
*FILE−物理ファイル(テーブル)、
論理ファイル・アクセスパス(インデックス、ビュー)
*PGM−RPGやCOBOLなどのプログラム
SETOBJACCコマンドの使用方法
SETOBJACCコマンドの主なパラメーターは下記の通りです。
- オブジェクト名(OBJパラメーター)操作対象となるオブジェクト名を指定。
- オブジェクトタイプ(OBJTYPEパラメーター)*FILE または *PGMを指定。
- 記憶域プール (POOLパラメーター)オブジェクトをメモリー上に展開するか、またはメモリー上から除去するかを指定。
メモリー上にロードする場合にはロード先のプールを指定。
*JOB オブジェクトはジョブと関連したプールにロードされます。
*BASE オブジェクトはベースプールにロードされます。
*SHRPOOLN 共用プールにロードしたい場合は*SHRPOOLNを指定し、プール識別コードパラメーターに共用プール番号を指定。
*PURGE オブジェクトをメモリー上から除去します。 -
メンバー(MBRパラメーター)対象がファイルの場合、主記憶域へ移入または主記憶域から削除するデータベース・ファイル・メンバーを指定します。
- メンバー・データ(MBRDATAパラメーター)対象がファイルの場合、対象はファイルのデータだけなのか、アクセスパスなのかを指定します。
*DATA ファイルのデータだけが対象になります。
*ACCPATH ファイルのアクセスパスが対象になります。
*BOTH ファイルのデータとアクセスパスの両方が対象になります。
テスト結果
テスト概要:SQL SELECT文によるDB検索処理時間を測定。SQL実行直前にSETOBJACCコマンド(POOL(*BASE)を指定)でSQLで使用する対象の物理ファイル(3個)をメモリー上にロードした場合とメモリー上から除去した場合の2つのパターンを計測。物理ファイル以外に使用する論理ファイル(インデックス)もありますが、それらはメモリー上にロード済みの状態で測定しています。
1.ハードウェア
- iSeries 825 3-WAY(3,600CPW)
- メモリー 約10GB
- ディスク約 350GB (ミラーリング構成。ディスク台数(ディスクアーム数)は35GB x 20 台)
2. ソフトウェア
- OS/400 V5R2
- 2004年03月時点での最新の累積PTF、DBグループPTFを適用済み
3. テスト方法
- SQL SELECT 文をiSeriesナビゲーターのSQLスクリプトの実行画面より実行
- SQL 文の概要は下記の通り
- 以下の 3つのファイル(テーブル)を使用し、数百件のレコードを抽出する。
ファイル 1 レコード数 約 450万 ファイルサイズ 約270MB
ファイル 2 レコード数 約 4,200万 ファイルサイズ 約 2.1GB
ファイル 3 レコード数 約 140万 ファイルサイズ 約 250MB
SQL文はJOIN, ORDER BY, GROUP BYなどを指定した比較的複雑なSQL文を使用。
4.テスト結果
- SETOBJACCコマンド POOL(*BASE) でファイルをメモリー上にロードしてから実行した場合
処理時間 約 1分 10秒 - SETOBJACCコマンド POOL(*PURGE) でファイルをメモリー上から除去した後、実行した場合
処理時間 約 2分 00秒 - 結果の考察
SETAOBJACCコマンドで対象ファイルをメモリー上に展開してからSQLを実行すると以下のような効果がある事が分ります。
SQLの処理時間を短縮する事ができる。
(約 2 分 → 約 1 分 10 秒)
ディスク稼働率を下げる事ができる。
(% BUSYの項目。ディスク・ビジー率が 2 ~ 5 % → 0 ~ 1%)
具体的にはディスクに対するREAD要求の回数、一回に読み取るデータ量が減少している。
参考:データベースへの更新処理が頻繁に行なわれるケースでは、ファイルに対する強制書き出しレコード数(ファイルに定義されている FRCRATIOパラメーター )の影響も考慮する必要があります。例えば、FRCRATIOパラメーターが 1.のように設定されたファイルをSETOBJACCコマンドでメモリー上にロードした場合、ディスクへのWRITE処理の負荷自体はそれほど減少しないケースも考えられます。
