6.11.2 ファイルバッファサイズ指定機能
ファイルバッファサイズ指定機能を使用すると,COBOLのファイル入出力機能で使用するファイルのバッファサイズを,使用する環境に合わせて任意に指定できます。バッファサイズを大きくすることで,ファイルに対する物理的な入出力回数を減らすことができ,性能向上を目的としたチューニングが可能となります。
この機能を使用しない場合,COBOLではファイルのバッファサイズを4,096バイトに設定します。
この機能は,次に示すファイルを対象としています。
-
順編成ファイル※1
-
相対編成ファイル※1 ※2
-
テキスト編成ファイル
-
CSV編成ファイル
- 注※1
-
環境変数CBLINBUFSIZE/CBLOUTBUFSIZEについては,COBOL入出力サービスルーチンを使用した入出力機能でも有効になりますが,環境変数CBLD_ファイル名のNOINBUFSIZE/NOOUTBUFSIZEについては,COBOL入出力サービスルーチンを使用した入出力機能では有効になりません。
- 注※2
-
ACCESS MODE句がSEQUENTIAL指定だけ有効です。DYNAMIC/RANDOM指定では有効になりません。
この機能の作用対象を次に示します。
OPENモード |
INPUT |
OUTPUT |
EXTEND |
I-O |
|||||
---|---|---|---|---|---|---|---|---|---|
WITH LOCK 指定 |
あり |
なし |
あり |
なし |
あり |
なし |
あり |
なし |
|
LOCK MODE句の指定 |
なし |
○ |
○ |
○ |
○ |
○ |
○ |
× |
× |
EXCLUSIVE |
○ |
○ |
○ |
○ |
○ |
○ |
× |
× |
|
AUTOMATIC |
○ |
×※2 |
○ |
○ |
○ |
×※2 |
× |
× |
|
MANUAL※1 |
○ |
×※2 |
○ |
○ |
○ |
×※2 |
× |
× |
- (凡例)
-
○:この機能の対象
×:この機能の対象外
- 注※1
-
順編成ファイル(COBOL入出力サービスルーチン機能も含む)およびテキスト編成ファイルの場合は,LOCK MODE句にMANUAL指定はできません。
- 注※2
-
CSV編成ファイルの場合は,この機能の対象(○)となります。
- 〈この項の構成〉
(1) 環境変数の指定
この機能を使用するには,次に示す環境変数を指定する必要があります。
環境変数名 |
環境変数の有効範囲 |
環境変数の機能内容 |
---|---|---|
CBLINBUFSIZE=nnnnnnnnnn※1 |
対象ファイルに有効※2 |
OPEN文のモードがINPUT指定のバッファサイズ制御によるファイル入力時に,使用するバッファサイズを2,000,000,000(約2GB)までの数値で指定する。 |
CBLOUTBUFSIZE=nnnnnnnnnn※1 |
OPEN文のモードがOUTPUT/EXTEND指定のバッファサイズ制御によるファイル出力時に,使用するバッファサイズを2,000,000,000(約2GB)までの数値で指定する。 |
|
CBLD_ファイル名=NOINBUFSIZE |
ファイル別に有効 |
指定されたファイルのバッファサイズ制御による入力時に,環境変数CBLINBUFSIZEで設定された値が無効になる。無効になった場合のバッファサイズは,4,096バイトになる。 |
CBLD_ファイル名=NOOUTBUFSIZE |
指定されたファイルのバッファサイズ制御による出力時に,環境変数CBLOUTBUFSIZEで設定された値が無効になる。無効になった場合のバッファサイズは,4,096バイトになる。 |
- 注※1
-
「nnnnnnnnnn」には,COBOLのファイル入出力機能で使用するバッファ長として,1〜2000000000の数字を指定します。
- 注※2
-
プロセス内の対象ファイルに有効になります。
各環境変数間の関係を次に示します。
環境変数CBLINBUFSIZE/ CBLOUTBUFSIZEの指定 |
環境変数CBLD_ファイル名の指定 |
||
---|---|---|---|
指定なし |
NOINBUFSIZE |
NOOUTBUFSIZE |
|
CBLINBUFSIZE |
○ |
× |
− |
CBLOUTBUFSIZE |
○ |
− |
× |
- (凡例)
-
○:環境変数CBLINBUFSIZE/CBLOUTBUFSIZEのバッファサイズの任意の値が有効
×:バッファサイズの任意の値が無効(バッファサイズは4,096バイト)
−:各環境変数の間に関連性はない(バッファサイズの任意の値が有効)
(2) 指定例(Bシェル)
環境変数の指定例を次に示します。
CBLINBUFSIZE=32768 プロセス内の入力時にファイルバッファを32,768バイトとする export CBLINBUFSIZE CBLOUTBUFSIZE=8192 プロセス内の出力時のファイルバッファを8,192バイトとする export CBLOUTBUFSIZE CBLD_FILE01=NOINBUFSIZE ファイル名FILE01について,入力の指定を取り消す※1 export CBLD_FILE01 出力を取り消す場合はNOOUTBUFSIZEを指定する
- 注※1
-
複数のオプションを指定する場合は,次に示すように各オプションをコロン(:)で区切ります。
CBLD_FILE01=NOINBUFSIZE:NOOUTBUFSIZE
export CBLD_FILE01
(3) 規則
-
環境変数に指定するバッファサイズは,レコード長より大きい値を指定してください。
-
環境変数の指定に関して,次に示す場合は環境変数の指定は無効となり,ファイルのバッファサイズは,4,096バイトになります。このとき,エラーメッセージなどは出力しません。
-
バッファサイズ1〜2,000,000,000以外
-
半角数字以外の文字
-
-
環境変数には,約2GBまでの値を指定できますが,実際に有効になる値は,マシン環境で使用できるメモリサイズに依存します。指定されたメモリサイズが確保できない場合は,システムがバッファを自動的に割り当てて動作します。
-
OPEN文のモードがI-O指定の場合は,この機能の対象外となります。
-
環境変数名で指定する「ファイル名」はSELECT句で指定したファイル名に対応します。ただし,ファイル名内のハイフン(-)はアンダーバー(_)に置き換えて指定してください。指定例を次に示します。
(COBOLでの記述例)
SELECT A-FILE ASSIGN TO SYS000.
(環境変数の指定例(Bシェル))
CBLD_A_FILE=NOINBUFSIZE
export CBLD_A_FILE
(4) 注意事項
ファイル入出力でのバッファサイズは,使用されるファイルサイズ,ディスク装置・マシン環境,およびシステムの仕様に依存することから実際に性能検証によって適切な値を使用してください。