9.2.2 ISAMロックテーブルの分割の設定
ISAMロックテーブル分割機能は,UNIX版JP1/AJS2限定の機能です。
ISAMデータベースにアクセスするときのロック制御は,システム内で唯一のロックテーブル(セマフォおよび共用メモリーで実現)を利用していました。このため,スケジューラーとジョブ実行環境で多数のプロセスからISAMデータベースに同時にアクセスすると,処理の競合が原因で資源の確保ができないで性能が劣化する現象が発生します。
また,ジョブネットの実行登録を解除する処理など,スケジューラーデータベースに対してアクセスするコマンドが多数実行されると,データベースの更新処理が競合します。更新処理対象の情報や定義が大きい場合に,更新,削除といった処理を実行すると,性能が劣化することがあります。
ISAMファイルアクセス競合による性能劣化を防止するための設定をする(ISAMロックテーブル分割機能を有効にする)と,次の図に示すように,ISAMファイル単位にロックテーブルを持つようにできるため,アクセス競合による性能劣化を防げます。
図9-2 ISAMファイルアクセス競合による性能劣化を防止するための設定をしたときの効果
![[図データ]](figure/zud09020.gif)
ISAMロックテーブル分割を設定する場合は,ロックテーブルの定義をISAMの設定ファイルに定義して共有メモリー・セマフォを割り当てる必要があります。
ISAMロックテーブル分割を設定するための方法を次に示します。
- カーネルパラメーターを調整する。
ISAMが使用するロックテーブルを複数個に分割して使用するため,システムリソースを今までより多く使用します。セマフォ・共用メモリーに関するカーネルパラメーターを再見積もりしてください。
- 補足事項
- AIXを使用している場合は,プロセスごとの共用メモリー・セグメントの最大数を拡張するために,環境変数EXTSHM=ONの設定が必要となります。そのため,システム内で稼働するJP1/AJS2を使用するすべてのユーザー(スーパーユーザーによるサービス起動時およびジョブネットワーク要素を操作するコマンド実行時)に対して有効になるように設定してください。
- なお,環境変数EXTSHMは,/etc/environmentに設定しないでください。スーパーユーザーおよびJP1/AJS2を使用するユーザーの.profileや/etc/profileなどに設定してください。
- システム内の物理ホストおよびすべての論理ホストで稼働している,次に示すJP1のサービスを停止する。
- JP1/AJS2サービス
- JP1/AJS2 Monitorサービス
- JP1/AJS2 Console Managerサービス
- JP1/AJS2 Console Agentサービス
- JP1/Baseサービス
- 注意事項
- 論理ホストの設定をするときは,JP1/AJS2サービスおよびJP1/Baseサービスを停止した際に,フェールオーバーしないようにしてください。
- 次に示すコマンドを実行して,ISAMが使用しているセマフォおよび共用メモリーを削除する。
# /opt/jp1base/bin/Jisrsdel
ロックテーブル制御方式の変更に伴い,従来のロックテーブルを一度削除します。
- ISAM制御ファイルを修正する。
/etc/opt/jp1base/conf/Jismdef.ini(ISAM制御ファイル)にロックテーブル分割の設定を定義します。Jismdef.ini(ISAM制御ファイル)の記述方法については,「(2) ISAM制御ファイルの内容を直接編集する場合」を参照してください。
- 注意事項
- 作成したファイルには,JP1を使用するOSユーザーに対してファイルの読み取りができる権限を与えておいてください。
- クラスタシステムの待機系のホストでの設定をする。
クラスタシステムで運用する場合,上記の手順1~4を待機系ホストでも実施して,同じ環境になるように設定してください。
- <この項の構成>
- (1) 環境定義ファイルスクリプトを使用する場合
- (2) ISAM制御ファイルの内容を直接編集する場合
(1) 環境定義ファイルスクリプトを使用する場合
ISAMファイルのセマフォ分割をする場合,複雑な設定が必要なため,JP1/AJS2では環境定義ファイルスクリプトを用意しています。
ISAMファイルのセマフォ分割をする場合の環境定義ファイルスクリプトは,次の形式で記述してください。
/opt/jp1ajs2/tools/ajs2isamdefgen [-s 各テーブルのロックテーブルサイズ] [-u]
ISAM環境定義用の環境定義ファイルスクリプトを実行すると,構成定義から,全物理・論理ホスト,全スケジューラー・ジョブ実行環境のデータベースパスを取得し,ISAMの環境定義ファイル(Jismdef.ini)の内容を組み立てて,標準出力に出力します。このファイルを,/etc/opt/jp1base/conf/Jismdef.iniにコピーして利用してください。
-sオプションを省略した場合,ロックテーブルサイズは標準の1,024に設定されます。-sオプションを指定する場合,この値より小さくしないでください。JP1/AJS2 - Viewからの同時接続数が多い場合や,ジョブネットワーク要素を操作するコマンドを同時に実行する場合などで,ロックテーブルが不足する場合は,最大32,767で指定してください。
-uオプションを指定した場合は,直接,/etc/opt/jp1base/conf/Jismdef.iniを上書き更新します。このスクリプトで作成したISAM制御ファイルは,ISAMロックテーブル分割機能をJP1/AJS2だけで使用する場合に限り使用できます。
(2) ISAM制御ファイルの内容を直接編集する場合
ISAM制御ファイル(Jismdef.ini)は,次のファイルをエディターなどで開き,直接書き換えることもできます。
/etc/opt/jp1base/conf/Jismdef.ini
- 注意事項
- ISAMファイルのセマフォ分割を定義する場合,複雑な設定が必要です。ISAM制御ファイル(Jismdef.ini)の内容を理解されていない場合は,JP1/AJS2が用意する環境定義ファイルスクリプトを使用して,ISAMファイルのセマフォ分割を設定してください。
(a) ISAM制御ファイルの各パラメーターの設定内容
ISAM制御ファイルの各パラメーターの設定内容について,次に説明します。ISAM制御ファイルには,ここで説明する項目の記述が必要です。各パラメーターは,項目をタブ文字(この項では,<tab>と表記します)で区切って記述します。
- 注意事項
- 標準インストール直後のISAM制御ファイルは,次に示す内容が記述されています。この情報に続けてパラメーターを記述してください。
![[図データ]](figure/zud09021.gif)
- ロックテーブル識別子数(ISM_SEMNUMパラメーター)
![[図データ]](figure/zud09022.gif)
- ロックテーブル識別子数は,最大で256個作成できます。1~256の値を指定してください。ここで定義する識別子数は,次のISM_ENTNUMで指定するロックテーブル個数と一致させる必要があります。
- 各ロックテーブルのサイズ(ISM_ENTNUMパラメーター)
![[図データ]](figure/zud09023.gif)
- ISM_SEMNUMパラメーターで指定した各ロックテーブル内に保持できるエントリー数を指定します。ISM_SEMNUMパラメーター個数分定義してください。ロックテーブル内のエントリー個数の標準値は,1,024です。
- ただし,JP1/AJS2 - Viewから同時に多数接続する場合や,ジョブネットワーク要素を操作するコマンドを同時に多数実行する運用をする場合で,「80 + ( (JP1/AJS2 - View接続数および同時に実行する「ジョブネットワーク要素を操作するコマンド数」) * 32)」の算出値が,1,024を超えるときは,スケジューラーデータベースのすべてのファイルに対して,この算出値を設定してください。なお,最大値は32,767です。
- 各ファイルのロックテーブルへのマッピング(ISM_FILEパラメーター)
![[図データ]](figure/zud09024.gif)
- ISM_SEMNUMおよびISM_ENTNUMパラメーターで定義したロックテーブルをISAMファイルに割り当てます。ファイル名称には,ファイルの完全パス名称から拡張子を取った形式で指定します。
- (例)
- /var/opt/jp1ajs2/database/schedule/AJSROOT1/AJSUNIT
- ロックテーブル識別子には,1~ISM_SEMNUMパラメーター指定値までの識別子番号を記述します。ロックテーブルをマッピングするときには,次のようにしてください。
- スケジューラーデータベースの設定
- 多くのプロセスから同時にアクセスされるため,すべてのファイルに異なる識別子を指定してください。
- ジョブ実行環境データベースの設定
- 複数のプロセスから同時にアクセスされないため,すべて同じロックテーブル識別子を指定してください。
- なお,該当するマシンで稼働するすべての論理ホストおよび物理ホストのファイルにパラメーターを記述してください。
(b) ISAM制御ファイルの構文チェック
次に示すコマンドを実行して,ISAM制御ファイルの設定に誤りがないか構文をチェックしてください。
# /opt/jp1base/bin/Jislckreg -c
このコマンドを実行したときにエラーメッセージが出力された場合は,ISAM制御ファイルの設定に誤りがあります。ISAM制御ファイルの設定内容を見直してください。
(c) ISAM制御ファイルの記述例
JP1/AJS2 - Managerでの標準的な運用例と記述例を次に示します。
- 物理ホストの標準ディレクトリで運用します。
- ジョブ実行環境データベース全体で,1個のロックテーブルを割り当てます。
- スケジューラーデータベースには,各ISAMファイルに異なるロックテーブルを割り当てます。
図9-3 ISAM制御ファイルの記述例1
![[図データ]](figure/zud09026.gif)
クラスタシステムで運用し,スケジューラーサービスが二つある場合の運用例と記述例を次に示します。
- クラスタシステムで共有ディスクに,/shdsk1を使用します。
- スケジューラーサービスにAJSROOT2とAJSROOT3を使用します。
- ジョブ実行環境データベース全体で,1個のロックテーブルを割り当てます。
- スケジューラーデータベースには,各ISAMファイルに異なるロックテーブルを割り当てます。
図9-4 ISAM制御ファイルの記述例2
![[図データ]](figure/zud09027.gif)