ソートマージ


1.13.1 ソート機能の処理の流れ

ソート機能の処理には,指定されたワークバッファのサイズにより次の二つの方式があります。

ソートの処理は,次の三つのフェーズで構成されます。

ソート処理では,三つのフェーズを順次実行します。ただし,インコアソートの場合,中間マージフェーズはありません。各フェーズの処理の概要を次に示します。

表1‒5 ソート機能の処理の概要

フェーズ

インコアソート

アウトコアソート

処理概要

処理の流れ

処理概要

処理の流れ

ソート

入力ファイルからすべてのレコードを読み込み,ワークバッファ上でソートキーを比較し,指定された順序に整列する。

図1-14

入力ファイルから分割してレコードを読み込み,ワークバッファ上でソートキーを比較し,指定された順序に整列したレコードの集合(ストリング)をソート用一時ファイルへ書き出す。

図1-15

図1-18

中間マージ

ソートフェーズで作成したストリングがワークバッファに入らない場合に動作する処理。ソート用一時ファイルのストリングをワークバッファ上に読み込み,ワークバッファに入るストリング数になるまでマージする。マージしたストリングは,マージ用一時ファイルへ書き出す。

図1-16

最終マージ

ワークバッファ上のすべてのレコードを,出力ファイルへ書き出す。

図1-14

ソート用一時ファイルのストリングをワークバッファ上に読み込み,一つのストリングにマージして,出力ファイルへ書き出す。

図1-17

(凡例)

−:なし

注※

中間マージ(順序2)を実行した場合は,マージ用一時ファイルに出力したストリングを読み込みます。

各処理の流れを次に示します。

図1‒14 ソートフェーズ〜最終マージフェーズの処理の流れ(インコアソート)

[図データ]

<説明>
  • ソートフェーズ

    入力ファイルからすべてのレコードをワークバッファに格納してソートします。

  • 最終マージフェーズ

    ワークバッファ上のすべてのレコードを出力ファイルへ書き出します。

図1‒15 ソートフェーズの処理の流れ(アウトコアソート)

[図データ]

<説明>

入力ファイルから分割してレコードを読み込み,ワークバッファ上でソートキーを比較します。そのあと,指定された順序に整列したレコードの集合(ストリング)を,ソート用一時ファイルへ書き出します。

この例では,ワークバッファは3レコード分を格納できるサイズと仮定します。その場合,入力レコードを3レコードずつ読み込んでソートします。ソート用一時ファイルには,5本のストリングが出力されます(入力レコード15件÷3=5ストリング)。

図1‒16 中間マージフェーズの処理の流れ(アウトコアソート)

[図データ]

<説明>

ソートフェーズで作成したストリングの先頭レコードが,ワークバッファに格納できない場合(ストリング数>ワークバッファ格納レコード数)に動作します。ワークバッファに格納できるストリング数になるまでマージします。

この例では,ワークバッファは3レコード分を格納できるサイズと仮定します。その場合,ストリング1〜3と,ストリング4〜5をそれぞれマージします。マージ用一時ファイルには,2本のストリングが出力されます。

図1‒17 最終マージフェーズの処理の流れ(アウトコアソート)

[図データ]

<説明>

マージ用一時ファイルのストリングを読み込み,一つのストリングにマージして,出力ファイルへ書き出します。

注※

中間マージフェーズが動作しない場合は,ソート用一時ファイルから読み込みます。

図1‒18 ストリング連結(ソートフェーズ)

[図データ]

<説明>

前ストリングの最終キーと,次ストリングの先頭キーが並んでいる場合,前ストリングに次ストリングを連結します。あらかじめ入力レコードのキーが並んでいると,ストリング連結されやすくなります。ストリング連結されることによって作成されるストリング本数が少なくなり,中間マージフェーズが動作しない場合もあります。

この例では,ワークバッファは3レコード分を格納できるサイズと仮定します。その場合,5本のストリングが出力されますが,ストリング連結されることによってストリング数は2本となるため,中間マージフェースは動作しません。