DAMサービス定義
形式
set形式
〔set dam_update_block=更新する最大ブロック数〕 〔set dam_added_file=オンライン中に追加する最大論理ファイル数〕 〔set dam_update_block_over=flush|error〕 〔set dam_message_level=1|0〕 〔set dam_tran_process_count=同時に実行するトランザクション ブランチの数〕 〔set dam_cache_size|dam_cache_size_fix=バッファ領域長〕 〔set dam_cache_attribute=free|fixed|hugepage〕 〔set dam_io_interval=実行間隔時間〕 〔set dam_transaction_access=global|branch〕 〔set dam_io_error_occur=stop|continue〕 〔set dam_cache_reuse_from=last|first〕 〔set dam_default_cache_num=キャッシュブロック再利用境界デフォルト値〕 〔set dam_ex_refer_read=none|stay〕 〔set dam_max_block_size=最大ブロック長〕 〔set dam_kb_size=1000|1024〕 〔set watch_time=最大応答待ち時間〕
機能
ファイル回復機能付き直接アクセスファイルを管理するための実行環境を定義します。
説明
set形式のオペランド
●dam_update_block=更新する最大ブロック数
〜〈符号なし整数〉((1〜32768))《8》
更新するブロックの最大値を指定します。DAMサービスは,この指定値によってシステムサービス用共用メモリプール(動的共用メモリ)上にDAMサービス分のメモリを確保します。そのため,算出式で求めた値よりも大きな値を指定した場合は,システムサービス用共用メモリプール(動的共用メモリ)を圧迫することがあります。
このオペランドに指定する値の算出方法を次に示します。
- 回復対象のDAMファイルにアクセスする場合
-
同一のトランザクション内で発生する次のA,B,およびCを合計した値をトランザクションごとに算出し,その中で最大の値をこのオペランドに指定します。
-
A:dc_dam_read関数で更新目的で入力するブロック数
-
B:dc_dam_write関数で出力するブロック数
-
C:dc_dam_read関数で排他あり参照指定で入力するブロック数(ただし,DAMサービス定義のdam_ex_refer_readオペランドにstayを指定した場合だけ)
トランザクションの開始から完了まで更新目的で入出力する場合の算出方法を次に示します
表3‒9 トランザクションの開始から完了まで更新目的で入出力する場合の算出方法 アクセス関数の実行順序
アクセスブロック数
A
B
C
算出値(A+B+C)
トランザクション開始
−
0
0
0
0
dc_dam_read関数(更新目的)
2
2
0
0
2
dc_dam_rewrite関数
2
0
0
0
0
dc_dam_write関数
3
0
3
0
5
トランザクション完了
−
0
0
0
0
最終値
2
3
0
5
この例では,算出値(A+B+C)が5となるため,dam_update_blockオペランドに5以上の値を指定してください。
-
- 回復対象外のDAMファイルにアクセスする場合
-
一つのUAPで発生する次のDの値,または一つのUAPで発生する次のEおよびFを合計した値からGを引いた値をUAPごとに算出し,その中で最大の値をこのオペランドに指定します。
-
D:UAPで実行する一つのDAMアクセス関数でアクセスするブロック数の最大値
-
E:dc_dam_read関数で更新目的で入力するブロック数
-
F:Eに示すdc_dam_read関数を実行したあとに,dc_dam_write関数で出力するブロック数
-
G:Fに示すdc_dam_write関数を実行するまでに,Eに示したdc_dam_read関数で更新目的で入力したブロックに対して,dc_dam_rewrite関数を実行したブロック数
dc_dam_write関数だけ実行する場合の算出方法を次に示します。
表3‒10 dc_dam_write関数だけ実行する場合の算出方法 アクセス関数の実行順序
アクセスブロック数
D
E
F
G
算出値(E+F-G)
dc_dam_start関数
−
0
0
0
0
0
dc_dam_write関数
3
3
0
0
0
0
dc_dam_write関数
5
5
0
0
0
0
dc_dam_end関数
−
0
0
0
0
0
最終値
5
0
0
0
0
この例では,Dが5となり,算出値(E+F-G)はDよりも小さい0になるため,dam_update_blockオペランドには5以上の値を指定してください。
dc_dam_read関数(更新目的)とdc_dam_write関数を実行した場合の算出方法を次に示します。
表3‒11 dc_dam_read関数(更新目的)とdc_dam_write関数を実行した場合の算出方法 アクセス関数の実行順序
アクセスブロック数
D
E
F
G
算出値(E+F-G)
dc_dam_start関数
−
0
0
0
0
0
dc_dam_read関数(更新目的)
3
3
3
0
0
3
dc_dam_write関数
5
5
0
5
0
8
dc_dam_end関数
−
0
0
0
0
0
最終値
5
3
5
0
8
この例では,Dが5となり,算出値(E+F-G)がDよりも大きい8になるため,dam_update_blockオペランドには8以上の値を指定してください。
dc_dam_read関数(更新目的)実行前にdc_dam_write関数を実行した場合の算出方法を次に示します。
表3‒12 dc_dam_read関数(更新目的)実行前にdc_dam_write関数を実行した場合の算出方法 アクセス関数の実行順序
アクセスブロック数
D
E
F
G
算出値(E+F-G)
dc_dam_start関数
−
0
0
0
0
0
dc_dam_write関数
8
8
0
0
0
0
dc_dam_read関数(更新目的)
4
0
4
0
0
3
dc_dam_write関数
5
0
0
5
0
9
dc_dam_end関数
−
0
0
0
0
0
最終値
8
4
5
0
9
この例では,Dが8となり,算出値(E+F-G)がDよりも大きい9になるため,dam_update_blockオペランドには9以上の値を指定してください。
dc_dam_read関数(更新目的)実行後,一部のブロックに対してdc_dam_rewrite関数を実行した場合の算出方法を次に示します。
表3‒13 dc_dam_read関数(更新目的)実行後,一部のブロックに対してdc_dam_rewrite関数を実行した場合の算出方法 アクセス関数の実行順序
アクセス
ブロック数
D
E
F
G
算出値(E+F-G)
dc_dam_start関数
−
0
0
0
0
0
dc_dam_read関数(更新目的)
4
4
4
0
0
4
dc_dam_rewrite関数
3
0
0
0
3
1
dc_dam_write関数
5
5
0
5
0
6
dc_dam_end関数
−
0
0
0
0
0
最終値
5
4
5
3
6
この例では,Dが5となり,算出値(E+F-G)がDよりも大きい6になるため,dam_update_blockオペランドには6以上の値を指定してください。
更新するブロック数が最大ブロック数を超えた場合,アクセス関数(dc_dam_read関数,dc_dam_write関数,dc_dam_rewrite関数)は,DCDAMER_JNLOV※1またはDCDAMER_ACSOV※2でエラーリターンします。
- 注※1
-
COBOL-UAP作成用プログラムの場合は,ステータスコードに「01613」を設定します。
- 注※2
-
COBOL-UAP作成用プログラムの場合は,ステータスコードに「01648」を設定します。
-
●dam_added_file=オンライン中に追加する最大論理ファイル数
〜〈符号なし整数〉((1〜128))《8》
オンライン中に追加する論理ファイルの最大値を指定します。
オンライン実行中には,指定した数まで論理ファイルを追加できます。
●dam_update_block_over=flush|error
〜《error》
トランザクションの途中で更新するブロック数が,dam_update_blockオペランドで指定した最大ブロック数を超える場合に,アクセス関数をエラーリターンするかどうかを指定します。
- flush
-
アクセス関数をエラーリターンしないで,処理を続行します。ただし,ブロックを更新(dc_dam_rewrite関数)しないで更新目的を入力(dc_dam_read関数)したブロックが最大ブロックに達している場合は,エラーリターンします。
flushを指定した場合の注意を次に示します。
-
最大ブロック数を超えたときに,一時的にDAMファイルへ出力します。このため,アクセス関数の処理時間が増加します。
-
DAMファイルを一時的に更新するため,当該トランザクションがロールバックした場合,一時的な更新を無効にする必要があります。このため,一時的な出力をする直前のブロック情報をDAMの回復用ジャーナル(FJ)に取得します。これによって,取得するジャーナルの量が多くなります。
-
回復用ジャーナル(FJ)に一時的な出力をする直前のブロック情報を設定するため,dc_dam_write関数に指定したブロックの入力が起こります。ただし,dc_dam_write関数に指定したブロックが,すでにDAMサービス用共用メモリに存在する場合,ブロックの入力は起こりません。
-
- error
-
アクセス関数をエラーリターンします。
●dam_tran_process_count=同時に実行するトランザクションブランチの数
〜〈符号なし整数〉((0〜8192))
DAMファイルにアクセスするトランザクションブランチを同時に実行する数を指定します。ここで指定した数に合わせて領域が確保されます。
- 1以上を指定した場合
-
オンラインシステムを開始するときに,指定した数の領域を確保します。指定した数の領域を確保できない場合は,確保できた領域だけでオンラインシステムを開始します。
確保した領域は,オンラインシステムが終了すると解放されます。
- 0を指定した場合
-
トランザクションを実行するときに領域を確保します。
確保した領域は,トランザクションが決着すると解放されます。
- 定義を省略した場合
-
UAPを起動するときに領域を確保します。
確保した領域は,UAPが終了すると解放されます。
0を指定した場合や領域が足りなくなった場合は,トランザクションを実行するときに領域を確保するため,処理が遅くなります。
なお,この指定値を大きくすると,共用メモリを圧迫します。使用できるメモリの容量を考えて指定してください。
●dam_cache_size|dam_cache_size_fix=バッファ領域長
〜〈符号なし整数〉((10〜1000000))(単位:キロバイト)
システム起動時にオンラインで参照・更新したブロックをスタックしておくためのバッファ領域の大きさを,dam_cache_sizeオペランドまたはdam_cache_size_fixオペランドに指定します。dam_cache_size_fixオペランドの指定は,dam_cache_sizeオペランドの指定より優先されます。
dam_cache_sizeを指定する場合は,次の「バッファ領域長の仮定値計算式」で示す値より大きい値を指定します。
- バッファ領域長の仮定値計算式
-
バッファ領域長 = A+B
A:(Mb/64+1)×128×n×Tr
B:{↓(A/576)↓}×32+64
- Mb:次のどちらか大きい値に8を加えた値
-
-
DAMサービス定義で定義した論理ファイルの中で,最大のブロック長を持つファイルのブロック長(damloadコマンド,dc_dam_create関数に指定したブロック長)
-
DAMサービス定義のdam_max_block_sizeオペランドで指定した最大ブロック長
-
n:DAMサービス定義のdam_update_blockオペランドで指定した最大更新ブロック数
Tr:DAMサービス定義のdam_tran_process_countオペランドで指定したトランザクションブランチ数
↓↓:小数点以下を切り捨てます。
- 注
-
DAMサービス定義のdamfile定義コマンドに-fオプションを指定して,キャッシュレスアクセスのDAMファイルを使用する場合は,Mbに次のどちらか大きい値に8を加えた値を指定してバッファ領域長を計算し,その算出値をdam_cache_size_fixオペランドに指定してください。
-
DAMサービス定義で定義したキャッシュレスアクセスではない論理ファイルの中で,最大のブロック長を持つファイルのブロック長(damloadコマンド,dc_dam_create関数に指定したブロック長)
-
DAMサービス定義のdam_max_block_sizeオペランドの指定値
すべてのDAMファイルをキャッシュレスアクセスとして指定する場合は,dam_cache_size_fixオペランドに10を指定してください。
-
dam_tran_process_countオペランドに0を指定した場合は,同時に実行するトランザクションブランチの数として「8」を仮定して計算します。dam_tran_process_countオペランドの指定を省略した場合は,同時に実行するトランザクションブランチの数としてトランザクションサービス定義のtrn_tran_process_countオペランドの指定値で計算します。
dam_cache_sizeオペランドを省略した場合や,DAMサービスが「バッファ領域長の仮定値計算式」を基に自動的に算出した値より小さい値を指定した場合は,DAMサービスが算出した値でバッファ領域を確保します。
「バッファ領域長の仮定値計算式」で求める値は,DAMサービス定義に指定した各オペランドを基に,最も大きいバッファ領域サイズを算出します。したがって,「バッファ領域長の仮定値計算式」で算出した値ではバッファを確保できない場合があります。その場合,DAMサービス内部でバッファ領域が確保できるまで,確保する値を1/2にしながら確保処理を実行します。
dam_cache_sizeオペランドおよびdam_cache_size_fixオペランドの指定値が指定範囲内でない場合には,ともにKFCA01644-Iメッセージが出力されます。
容量不足のためdam_cache_sizeオペランドおよびdam_cache_size_fixオペランドの指定値でバッファ領域を確保できない場合には,ともにKFCA01648-Eメッセージが出力されDAMサービスやUAPがダウンします。
なお,ディファード更新処理指定のDAMファイルを指定している場合は,仮定値計算式で算出したバッファ領域長の値に加えて次の見積もり式に示す容量が必要です。
- 見積もり式
-
実行間隔時間内※に実行され遅延書き込み処理に滞留するトランザクション数×おのおののトランザクションで更新されるDAMファイルのブロック長の総和
- 注※
-
DAMサービス定義のdam_io_intervalオペランドに指定した実行間隔時間
次に,dam_cache_sizeオペランドとdam_cache_size_fixオペランドの違いについて説明します。
- dam_cache_sizeを指定した場合
-
dam_cache_sizeを指定した場合,dam_cache_sizeの指定値,または前述の「バッファ領域長の仮定値計算式」の値のどちらか大きい方の値が採用されます。dam_cache_sizeオペランドの指定を省略した場合,およびdam_cache_sizeオペランドの指定値が指定範囲内でない場合は,KFCA02530-Iメッセージが出力され仮定値計算式の値が採用されます。dam_cache_size_fixオペランドを指定した場合は,優先的にdam_cache_size_fixオペランドの指定値が採用されます。
- dam_cache_size_fixを指定した場合
-
優先的にdam_cache_size_fixオペランドの指定値を採用します。dam_cache_size_fixオペランドの指定を省略した場合,およびdam_cache_size_fixオペランドの指定値が指定範囲内でない場合は,dam_cache_sizeオペランドが指定されていればそれを採用し,指定されていなければKFCA02530-Iメッセージを出力して仮定値計算式の値を採用します。
- dam_cache_size_fixを指定することの利点
-
dam_cache_sizeオペランドに指定する値や,「バッファ領域長の仮定値計算式」で算出される値は,次の値を基に算出します。
-
DAMサービス定義に指定したDAMファイルの最大ブロック長(damfile定義コマンドで指定したファイルの最大ブロック長)
-
同時実行トランザクション数(dam_tran_process_countオペランド指定値)
-
トランザクション内で更新する最大ブロック数(dam_update_blockオペランド指定値)
計算式では,上記の各値を掛け合わせることで求めています。つまり,最大ブロック長を持つDAMファイルが一つのトランザクションで1ブロックだけ更新される場合でも,上記計算式を用いて算出するため,十分に動作できるバッファサイズよりもさらに大きい値でバッファを確保することになります。
このような場合,最適なバッファ領域長をdam_cache_size_fixオペランドに指定することで,最適なバッファを確保できます。ただし,dam_cache_size_fixオペランドを使用する場合は,その指定値に十分注意してください。dam_cache_size_fixオペランドに指定した値が,実際に必要となるバッファ長より小さかった場合,オンライン処理中にバッファ領域不足が発生し,処理が続行できなくなります。また,使用するDAMファイルのうち,ディファード更新指定ファイルがある場合,実行間隔時間(dam_io_intervalオペランドの指定値)内に滞留する量(滞留するブロック数とそのブロック長の総和)も考慮して,バッファ領域長を見積もる必要があります。
-
dam_cache_sizeオペランドおよびdam_cache_size_fixオペランドの相互指定関係での採用値について次の表に示します。
dam_cache_size_fixの指定 |
dam_cache_sizeの指定 |
||
---|---|---|---|
指定が正しい場合 |
指定を省略した場合 |
指定を誤った場合(KFCA01644-I出力) |
|
指定が正しい場合 |
(2) |
(2) |
(2) |
指定を省略した場合 |
(1) |
(3) |
(3) |
指定を誤った場合(KFCA01644-I出力) |
(1) |
(3) |
(3) |
- (凡例)
-
(1):dam_cache_sizeへの指定値を採用
(2):dam_cache_size_fixへの指定値を採用
(3):仮定値計算式の値を採用,かつ,KFCA02530-Iメッセージ出力
バッファ領域不足が発生し処理が続行できなくなった場合,アボートコードが出力されるので,アボートコードに対する対策方法に従ってください。アボートコードについては,マニュアル「OpenTP1 メッセージ」を参照してください。
なお,DAMファイルの構成を変更するなど,システムの定義および環境を変更する場合にも,再度指定値を見直してください。
リソースマネジャ用共用メモリの所要量は,dam_cache_size_fixオペランドで指定したキャッシュサイズになります。
●dam_cache_attribute=free|fixed|hugepage
〜《free》
共用メモリに確保したバッファ領域の属性を指定します。このオペランドを指定する場合は,実装するメモリの容量や,全使用量に対するバッファ領域の割合などを考慮してください。この指定値は,ディファード更新機能に関係なく指定してください。
- free
-
バッファ領域をメモリ上に固定しません。実装する実メモリの容量が少ない場合,共用メモリのページングが発生して処理速度が低下することがあります。
- fixed
-
バッファ領域をメモリ上に固定します。共用メモリのページングによって処理速度が低下することはありません。ただし,実装するメモリの容量が少ない場合,共用メモリ以外(テキストやデータセグメントなど)でページングが発生することがあります。
fixedは,OSがHP-UXまたはSolarisの場合だけ指定できます。なお,Solarisの場合,ご使用の環境によってはfixedを指定できないことがあります。詳細については,「リリースノート」を参照してください。
- hugepage
-
バッファ領域をLinuxのHugepage機能を適用して,OS管理領域のメモリ使用効率を向上します。
これによって,バッファ領域を使用するプロセス数増加時にメモリ消費量を軽減できる場合があります。
この指定値は,Linux版の64ビット版の場合だけ指定できます。
- <事前設定>
-
この機能はLinuxのHugepage機能を使っているため,OpenTP1を起動する前に,LinuxのHugepage機能を有効にしておく必要があります。Hugepage機能については,OSのマニュアルを参照してください。Hugepage機能を有効にするときに設定するOSのカーネルパラメタの詳細については,マニュアル「OpenTP1 運用と操作」のHugepage機能の適用(Linux限定)の説明を参照してください。
また,プロセスサービス定義のprc_hugepage_group_idオペランドに,カーネルパラメタのvm.hugetlb_shm_groupに指定したグループIDを指定してください。
- <注意事項>
-
この指定を行った場合の注意事項を次に示します。
-
バッファ領域がメモリ上に固定されます。
-
確保するバッファ領域の大きさがページサイズ※の大きさに切り上げられます。
-
OSの設定によっては,coreファイルにHugepage機能を適用したバッファ領域が含まれません。coreファイルにバッファ領域を含める場合は,次のどれかを変更する必要があります。
・システム共通定義のprc_coredump_filterオペランド
・ユーザサービスデフォルト定義のprc_coredump_filterオペランド
・ユーザサービス定義のprc_coredump_filterオペランド
注※
ページサイズは,「grep Hugepagesize /proc/meminfo」を実行して確認できます。ページサイズを確認する際は単位に注意してください。
-
- <指定の目安>
-
バッファ領域がメモリ上に固定化された場合に,次のどちらにも該当しない場合は,この指定を推奨します。
-
残りの物理メモリの容量で他プロセスを含む固定化されないメモリのページングが頻繁に発生する
-
システム性能に影響する
-
●dam_io_interval=実行間隔時間
〜〈符号なし整数〉((1〜60))《1》(単位:秒)
ディファード更新機能を使用するとき,出力専用プロセスを実行する間隔を指定します。この指定値は,ディファード更新機能を使用しないときは,指定する必要はありません。
出力専用プロセスの実行間隔を大きくし過ぎるとバッファ領域不足が発生し,ほかのトランザクションで更新または出力しようとしたブロックの書き込みができなくなって,メモリ不足でUAPがダウンすることがあります。この値は動作するトランザクションがピークに達した場合を想定したときの実行間隔時間内に終了するトランザクションの数と各トランザクションで更新,および出力するブロック数(バッファ所要量)で決めてください。
●dam_transaction_access=global|branch
〜《branch》
DAMファイルのデータ管理および排他管理をするトランザクションの単位を指定します。
- global
-
グローバルトランザクション単位で,ファイルデータ管理および排他管理をします。globalを指定すると,論理ファイルのオープン時にファイル排他を指定できません。
- branch
-
トランザクションブランチ単位で,ファイルデータ管理および排他管理をします。
トランザクションブランチが異なれば,同一グローバルトランザクションでもアクセスはエラーとなります。
●dam_io_error_occur=stop|continue
〜《continue》
ディスク更新時にディスク障害(入出力エラー)が発生した場合のDAMサービスの処置を指定します。
DAMサービスでは,トランザクションの同期点処理時にディスク更新をします。または,トランザクションの途中更新機能を使用している場合のDAMサービスアクセス関数の延長で,ディスク更新をします。ここでは,ディスク更新時に障害が発生した場合のDAMサービスの処置を指定します。
ディファード更新時および回復対象外ファイル更新時の,ディスク障害が発生した場合の処置については,指定値による違いはありません。ディファード更新時にディスク障害が発生した場合は,KFCA01646-E,KFCA01642-Iのメッセージを出力して障害ファイル以外のファイルについて処理を続行します。回復対象外ファイル更新時にディスク障害が発生した場合は,KFCA01646-E,KFCA01642-Iのメッセージを出力してdc_dam_rewrite関数,dc_dam_write関数がDCDAMER_IOERをリターンします。
- stop
-
DAMアクセスを行っているUAPを異常終了します。このとき,クリティカル状態であるため,システムを停止します。KFCA01622-EまたはKFCA01646-Eのメッセージで示される障害が起きたファイルに対して,障害要因を取り除くかまたは新しい別のボリュームを割り当て,damfrcコマンドを実行してファイルを回復させてください。
ファイルの回復手順を次に示します。
-
damfrcコマンドの実行
OpenTP1の再開始を行う前に,必ずバックアップしてあったデータをdamrstrコマンドでリストアし,damfrcコマンドを実行してください。システムダウン時点までのジャーナル情報を基にファイルを回復します。
-
OpenTP1の再開始
OpenTP1を再開始します。
-
ファイルの閉塞解除
OpenTP1を再開始しても,障害が起きたファイルは障害閉塞状態になっています。そのため,damrlesコマンドを実行して閉塞を解除してください。
-
トランザクションの決着
damrlesコマンド実行後,ファイルへのアクセスが可能となり,OpenTP1ではトランザクションの回復(決着)処理が行われ,そこでトランザクションが完了し,データの整合性が取られます。
なお,damrlesコマンドが実行されるまでは,KFCA01623-E(ファイル切り離し中)またはKFCA01624-E(ファイル閉塞中)のメッセージが出力され続け,トランザクションの回復ができない理由をユーザに知らせます。
-
- continue
-
ディスク障害の発生がDAMアクセス中の場合,KFCA01618-E,KFCA01622-E,およびKFCA01642-Iのメッセージを出力後,UAPを異常終了させます。
また,トランザクションの同期点処理中の場合は,KFCA01622-EおよびKFCA01642-Iのメッセージを出力したあと,トランザクションを完了させます(コミット決着:OpenTP1ログ上は正常に終了し,関数のリターン値もDC_OKに見えます)。この場合,トランザクションは正常に完了していますが,障害の起きたファイルはトランザクションで更新したデータが反映されていません。
このため,業務処理を続行するとデータの不整合となりますので,必ず,障害の起きたファイルをいったんオンラインから切り離し,damrstrコマンド,およびdamfrcコマンドによる論理的なファイル回復を行い,回復したファイルをdamaddコマンドで追加後,damrlesコマンドで閉塞を解除してください。ファイルの切り離し,回復,追加をする場合には,UAPを停止させてください。
●dam_cache_reuse_from=last|first
〜《last》
DAMファイルをアクセスするトランザクションで,新たにキャッシュブロック用領域が必要となった場合,どのブロックから優先的に再利用対象として検索するかを指定します。なお,DAMサービスではブロックを新しく更新し,参照用キャッシュチェインにつなぐ場合,参照用キャッシュチェインの先頭につないでいます。
- last
-
再利用するキャッシュブロックを,DAMサービス内部で管理している参照用キャッシュチェインの後ろにあるキャッシュブロックから優先して検索します。lastを指定すると,最も古く参照用キャッシュチェインにつながれたキャッシュブロックが再利用されます。
- first
-
再利用するキャッシュブロックを,DAMサービス内部で管理している参照用キャッシュチェインの先頭にあるキャッシュブロックから優先して検索します。firstを指定すると,最も新しくキャッシュチェインにつながれたキャッシュブロックが再利用されます。
lastを指定した場合でも,キャッシュブロックの検索のタイミングでトランザクションによってアクセスされているキャッシュブロックは,再利用対象外として扱われます。したがって,その次に古いキャッシュブロックが再利用対象として検索されます。また,最も古くからキャッシュチェインに残っているかどうかを判断していて,LRU方式のように最近アクセスされたもののチェインの並べ替えはしていません。あくまで,アクセスされ,キャッシュチェインにつながれた時期が古いものから検索されます。
●dam_default_cache_num=キャッシュブロック再利用境界デフォルト値
〜〈符号なし整数〉((0〜4000000))《0》
キャッシュブロック再利用処理の境界値のデフォルト値を指定します。このオペランドに指定した値が,damcache定義コマンドでキャッシュブロック再利用境界値を指定しなかった場合の論理ファイルの境界値となります。
●dam_ex_refer_read=none|stay
〜《none》
DAMファイルをアクセスするトランザクションで,排他あり参照指定で読み込むブロックを,トランザクション決着までキャッシュバッファ領域上に残すかどうかを指定します。
このオペランドを使用する場合,次のことに注意してください。
-
DAMサービス定義のdam_update_blockオペランド(一つのトランザクションで更新できるブロック数)には,排他あり参照readを実行するブロック数を加算してください。
-
トランザクションの途中更新機能を使用している場合,この機能を使用した排他あり参照目的の入力後に,更新目的の入力をし,ブロックの更新(dc_dam_rewrite関数)を実行すると,トランザクションの途中で更新ブロックのデータ実更新が発生することがあります。更新ブロックのデータ実更新が発生した場合は,トランザクション決着時までキャッシュバッファ領域上に必ず残すとは保証されません。更新しないキャッシュブロックについてはトランザクション決着時まで残ります。
-
排他あり参照目的の入力は,トランザクション決着まで排他を解放することはできません。
- none
-
排他あり参照指定で入力したキャッシュブロックは,ユーザプログラムにデータを返却したあと,再利用可能なブロックとして扱います。ただし,キャッシュバッファ領域に余裕がある場合,すぐに再利用されることはありません。キャッシュバッファ領域の空き領域が少なくなった場合に再利用される可能性があります。
次のような場合は,noneを指定してください。
-
アクセスするDAMブロックに特定性がない場合
-
- stay
-
排他あり参照指定で入力したキャッシュブロックでも,更新指定のときと同じようにトランザクション決着時までキャッシュバッファ領域上に残します。
次のような場合にstayを指定し,排他あり参照readを実行すると,キャッシュヒット率が向上しやすくなります。
-
特定のDAMブロックに対して,頻繁に排他あり参照readを実行する場合
なお,stayを指定した場合,次のことに注意してください。
-
DAMサービス定義に指定したdam_update_blockオペランドに,排他あり参照目的の入力を実行するブロック数を加算する必要があります。また,dam_update_blockオペランドの値を加算して,OpenTP1の動的共用メモリサイズを大きくする必要があります。
-
dam_update_blockオペランドの値を加算しなかった場合,次のような影響があります。
-
トランザクションの途中更新機能を使用している場合
一つのトランザクション内で,排他あり参照目的の入力,更新目的の入力,ブロックの更新(dc_dam_write関数)を実行したブロック数の合計が,dam_update_blockオペランドの指定値を超えると,途中更新処理が実行され,データ実更新が発生します。したがって,排他あり参照目的の入力ブロック数が多い場合,途中更新処理を実行する回数が多くなり,その結果,データの実更新が頻繁に発生します。
-
DAMサービス定義のdam_update_block_overオペランドにerrorを指定している場合
一つのトランザクション内で,排他あり参照目的の入力,更新目的の入力,ブロックの更新(dc_dam_write())を実行したブロック数の合計が,dam_update_blockオペランドの指定値を超えると,そのときに実行したAPIがDCDAMER_JNLOVでエラーリターンします。したがって,排他あり参照目的の入力ブロック数が多い場合,DCDAMER_JNLOVでエラーリターンする回数が多くなります。
-
●dam_max_block_size=最大ブロック長
〜〈符号なし整数〉((504〜32760))※《504》(単位:バイト)
- 注※
-
セクタ長×n−8を満たす値を指定してください(nは正の整数)。
セクタ長は次のとおりです。
-
キャラクタ型スペシャルファイルの場合:filmkfsコマンドの-sオプション指定値
-
通常ファイルの場合:512バイト
-
システム内のDAMファイルの最大ブロック長を指定します。ただし,条件によって,指定値と異なる値が最大ブロック長に採用されることがあります。条件と採用される最大ブロック長の関係を次の表に示します。
dam_max_block_sizeオペランド |
damfile定義コマンド |
|
---|---|---|
指定あり |
指定なし |
|
指定が正しい場合 |
aまたはbのうち,大きい値を採用 |
aの値を採用 |
指定を省略した場合 |
bの値を採用 |
504を仮定 |
指定を誤った場合 (504〜32760の範囲外) |
bの値を採用※1 |
504を仮定※1 |
指定を誤った場合 (セクタ長×n-8以外(nは正の整数)) |
bの値を採用※2 |
504を仮定※2 |
- (凡例)
-
a:DAMサービス定義のdam_max_block_sizeオペランドの値
b:DAMサービス定義に定義されている論理ファイルの中で最大ブロック長を持つファイルのブロック長
- 注※1
-
KFCA00216-EおよびKFCA01644-Iを出力します。
- 注※2
-
KFCA02565-Iを出力します。
●dam_kb_size=1000|1024
〜《1000》
DAMサービス用共用メモリとして確保されるバッファ領域のサイズをDAMサービス定義($DCDIR/conf/dam)のdam_cache_sizeオペランド(単位:キロバイト)に指定した場合,自動的にバイト換算されます。そのときに,1キロバイト当たり1,000バイトで換算するか,1,024バイトで換算するかを指定します。
- 1000
-
1キロバイト当たり1,000バイトで換算します。
- 1024
-
1キロバイト当たり1,024バイトで換算します。
●watch_time=最大応答待ち時間
〜〈符号なし整数〉((0〜65535))(単位:秒)
RPCによってプロセス間で通信する場合,サービス要求を送信してからサービスの応答が返るまでの待ち時間の最大値を指定します。
OpenTP1の終了処理で,このオペランドで指定した時間だけ終了処理を待ち合わせる場合があります。したがって,大きな値を指定した場合,OpenTP1の終了処理に時間が掛かる場合があります。
指定時間を過ぎても応答がない場合は,RPCは送受信タイムアウトとしてエラーリターンします。
0を指定した場合は,応答を受信するまで待ち続けます。0を指定した場合,OpenTP1が終了しない場合があります。
省略した場合は,システム共通定義のwatch_timeオペランドの値を仮定します。
このオペランドは,システム共通定義のwatch_timeオペランドのデフォルト値で使用してください。
特別なチューニングを必要とする場合以外は,このオペランドの内容を変更しないことをお勧めします。
システム共通定義のwatch_timeオペランドのデフォルト値よりも,極端に小さな値または大きな値を指定すると,OpenTP1ダウンに至る障害が発生する場合がありますので,ご注意ください。
コマンド形式
次ページ以降に記述しています。