ソートマージ


17.1.1 ワークバッファサイズと処理時間

一般的に,ワークバッファサイズが大きいほど処理時間は短くなります。しかし,ワークバッファサイズの増加量に対する処理時間の減少量は一定ではなく,ワークバッファサイズが増えるに従って処理時間の減少量は小さくなっていきます。そして,ワークバッファがあるサイズに達すると,それ以上処理時間は減少しなくなります。ワークバッファサイズに対する処理時間の減少について,一般的な傾向を次の図に示します。

図17‒1 ワークバッファサイズと処理時間の関係

[図データ]

上記の図の限界点は,入力データ量が多いほど右側へ移動します。大量のデータをソートする場合は,ワークバッファのサイズを大きく指定すると効果があります。

ただし,極端に大きなワークバッファを指定すると,ソート処理だけでなく,システム全体のスループットが低下する可能性があります。これは,実メモリ量に対する仮想メモリの比率が大きいほど,ページングやスワッピングが多く発生してしまうためです。同時に実行するソート処理の多重度を上げた場合も同様です。

システム全体の運用を考慮した上で,ワークバッファサイズを指定してください。

exsortコマンドには,ワークバッファサイズを自動で見積もる機能を用意しています。ただし,この機能はワークバッファサイズの指定がない場合に有効となります。この機能を使用すれば,少量のメモリ所要量で,比較的速いソートが期待できます。この機能で見積もるワークバッファサイズについては,「17.1.1(2) アウトコアソート」の「一時ファイルを作成する(アウトコアソート)場合のワークバッファサイズ見積もり式」を参照してください。

〈この項の構成〉

(1) インコアソート

一時ファイルを使用しないでソートすることをインコアソートといいます。入力データ量に対し十分なワークバッファサイズを指定した場合は,インコアソートとなります。

一般的に,インコアソートは一時ファイルに対する入出力が不要となるため,処理時間が短くなります。ただし,大きなワークバッファサイズを指定すると,ページングやスワッピングが多く発生し,処理時間が増加する可能性があります。また,ワークバッファが大きくなった分,データのソートが多く実行されることになり,CPU時間が増加する可能性もあります。

一時ファイルを作成しない(インコアソート)場合のワークバッファサイズ見積もり式を次に示します。

図17‒2 一時ファイルを作成しない(インコアソート)場合のワークバッファサイズ見積もり式

[図データ]

SORT EEの計算式の変数値を次の表17-1に示します。

また,SORTの計算式の変数の値を次の表17-2に示します。

表17‒1 ワークバッファサイズ見積もり式の変数値(SORT EEの場合)

変数

SORT EEの条件

変数の値

32ビット版

64ビット版

n1

重複レコードの入力順序保存機能(-cmdopt DUPオプション)指定なし

0

0

重複レコードの入力順序保存機能(-cmdopt DUPオプション)指定あり

4

8

n2

入力ファイルは,固定長順編成ファイル(fileorg=S)または可変長順編成ファイル(fileorg=V)

0

0

入力ファイルは,テキストファイル(fileorg=A)またはCSVファイル(fileorg=C)

4−改行文字の長さ※1

4−改行文字の長さ※1

n3

(可変サイズ)

ソートキーの合計長※2

ソートキーの合計長※2

n4

(固定サイズ)

12

24

n5

(固定サイズ)

20

32

n6

(固定サイズ)

40

64

注※1

codetypeオペランドに指定した入力データのエンコードの種別によって,改行文字の長さは異なります。例えば,エンコードが「UCS-4LE」で,改行文字が「CRLF」の場合は,改行文字の長さは8バイトなので,n3の値は「4-8=-4」バイトとなります。

エンコードの種類

改行文字の長さ

LF

CRLF

ASCII,SJIS,EUC-JP,EUC-HJ,またはUTF-8

1

2

UCS-2LE,UCS-2BE,UTF-16LE,またはUTF-16BE

2

4

UCS-4LE,UCS-4BE,UTF-32LE,またはUTF-32BE

4

8

注※2

マルチバイト文字の属性コード「u」または「v」で,キー長に「文字数」を指定している場合,1文字の長さ(実際の入力データの文字のバイト長ではなく,正規化したデータ長)は次のとおりです。

エンコードの種類

1文字の長さ(正規化長)

属性コード「u」

属性コード「v」

ASCII

1

1

SJIS

EUC-HJ

UCS-2LE

UCS-2BE

2

2

EUC-JP

3

3

UTF-8

UTF-16LE

UTF-16BE

UCS-4LE

UCS-4BE

UTF-32LE

UTF-32BE

4

8

例えば,エンコード「UTF-8」,属性コード「v」,キー長「6文字(v+0-6)」と指定した場合,1文字の長さは8バイトのため,キーの長さは「6文字×8バイト=48」バイトとなります。

表17‒2 ワークバッファサイズ見積もり式の変数値(SORTの場合)

変数

SORTの条件

変数の値

32ビット版

64ビット版

n1

重複レコードの入力順序保存機能の指定なし

0

0

重複レコードの入力順序保存機能の指定あり

4

8

n2

入力ファイルは,固定長順編成ファイル,または可変長順編成ファイル

0

0

入力ファイルは,テキストファイル,またはCSVファイル

3

3

n3

(可変サイズ)

ソートキーの合計長

ソートキーの合計長

n4

(固定サイズ)

12

24

n5

(固定サイズ)

20

32

n6

(固定サイズ)

40

64

なお,この概算式は,exsortコマンドの-worksizeパラメタに「incore」を指定した場合の自動見積もりで使用されます。

(2) アウトコアソート

一時ファイルを使用してソートすることをアウトコアソートといいます。使用メモリ量を小さくして,CPU時間を短くできます。ただし,インコアソートと比べて入出力が増えます。

一時ファイルを作成する(アウトコアソート)場合のワークバッファサイズ見積もり式を次に示します。

図17‒3 レコード長が65,535バイト以下で,一時ファイルを作成する(アウトコアソート)場合のワークバッファサイズ見積もり式

[図データ]

図17‒4 レコード長が65,536バイト以上で,一時ファイルを作成する(アウトコアソート)場合のワークバッファサイズ見積もり式

[図データ]

SORT EEの計算式の変数値については,「17.1.1(1) インコアソート」の「表17-1 ワークバッファサイズ見積もり式の変数値(SORT EEの場合)」を参照してください。

また,SORTの計算式の変数の値については,「表17-2 ワークバッファサイズ見積もり式の変数値(SORTの場合)」を参照してください。

この概算式は,exsortコマンドの-worksizeパラメタに「auto」を指定した場合の自動見積もりで使用されます。

この概算式の値は目安であり,必ずしも十分な性能が得られるとは限りません。メモリの使用状況,ソート処理の多重度,ファイルの配置ボリュームなどにより,概算式よりも大きなサイズを指定した方が処理時間が短くなる可能性もあります。このため,チューニングの実施をお勧めします。

ワークバッファが小さ過ぎると,一時ファイルを2個作成する「中間マージフェーズ」が動作し,処理時間が増加することになるので注意してください。

中間マージフェーズが動作する場合のワークバッファサイズ見積もり式を次に示します。

図17‒5 中間マージフェーズが動作する場合のワークバッファサイズ見積もり式

[図データ]

SORT EEの計算式の変数値については,「17.1.1(1) インコアソート」の「表17-1 ワークバッファサイズ見積もり式の変数値(SORT EEの場合)」を参照してください。

また,SORTの計算式の変数の値については,「表17-2 ワークバッファサイズ見積もり式の変数値(SORTの場合)」を参照してください。

なお,exsortコマンドでは,中間マージフェーズが動作した場合にKBLS1007-Iメッセージに中間マージフェーズが動作したことを示す「WORKSIZE=outcore(PREM)」が追加出力されます。この際は,ワークバッファサイズに指定した値を見直してください。KBLS1007-Iメッセージの詳細については,「付録L.2 SORT EEのメッセージ一覧」を参照してください。