OpenVMS
ユーザーズ・マニュアル


前へ 次へ 目次 索引


9.8 ソートまたはマージ操作の最適化

ソート操作またはマージ操作の効率は,ソート環境により,いくつかの方法で向上させることができます。SORT コマンドまたは MERGE コマンドに /STATISTICS 修飾子を使用すると,ソート環境の変数を表示できます。

この統計情報を調べてから,この後に説明する最適化オプションの使用を検討してみてください。

SORT コマンドまたは MERGE コマンドに /STATISTICS 修飾子を指定すると,次のような出力が表示されます。


$ SORT/STATISTICS PAGEANT.LIS DOCUMENT.LIS
                  OpenVMS Sort/Merge Statistics 
 
Records read:           3 (1)     Input record length:       26 
Records sorted:         3        Internal length:           28 
Records output:         3        Output record length:      26 
Working set extent: 16384 (2)     Sort tree size:            42 
Virtual memory:       392        Number of initial runs:     0 
Direct I/O:            10        Maximum merge order:        0 
Buffered I/O:          11        Number of merge passes:     0 
Page faults:          158 (3)     Work file allocation:       0 (4)
Elapsed time: 00:00:00.54        Elapsed CPU:      00:00:00.03 (5)

この統計表示から次のことが分かります。

  1. Records read

    ソート操作中に読み込まれたレコードの数を示す。ソート操作で特定のレコードを省略する方法についての詳細は,第 9.8.2 項 を参照。

  2. Working set extent

    ソート操作を実行するために確保されたブロックの数を示す。ワーキング・セットを大きくする方法についての詳細は,第 9.8.4 項 を参照。

  3. Page faults

    オペレーティング・システムが,物理メモリからページング・デバイスへプロセスを転送した回数を示す。ページングをしないようにする方法についての詳細は,第 9.8.4 項 を参照。

  4. Work file allocation

    作業ファイルのために確保されたディスク領域のサイズを示す。作業ファイルについての詳細は,第 9.8.3 項 を参照。

  5. Elapsed CPU

    オペレーティング・システムがソート操作の処理に費やした CPU 時間を示す。別のソート方法を選択して時間を節約する方法についての詳細は,第 9.8.1 項 を参照。

9.8.1 ソートのプロセス

Sort では,内部でデータをソートするときに使用する,レコード,タグ,アドレス,索引の 4 つのプロセスを定義します。(高性能 Sort/Merge ユーティリティでは,レコード・プロセスのみがサポートされます。タグ,アドレス,索引の各プロセスについては,OpenVMS Alpha の将来のリリースでサポートされる予定です。)RECORD が省略時のプロセスになります。指定するプロセスのタイプによっては,必要な記憶域の量と同様に,Sort 操作の効率も変わることがあります。その他のソート・プロセスについての詳細は,第 9.2.6 項 を参照してください。

どのタイプのソート方法を使用するかは,次の点を考慮して決定してください。

9.8.2 レコードとフィールドの排除

Sort の効率は,指定ファイルを使用して高めることもできます。/CONDITION,/INCLUDE,/OMIT 修飾子を使用すると,必要なレコードだけを選択して出力ファイルに格納できます。(高性能 Sort/Merge ユーティリティでは,指定ファイルはサポートされていません。この機能は,OpenVMS Alpha の将来のリリースでサポートされる予定です。)また,指定ファイル修飾子を使用すれば,レコードのフォーマットを変更して,不必要なフィールドを出力ファイルに出さないようにすることもできます。これらの修飾子は,コマンド行修飾子として使用することはできません。

9.8.3 作業ファイルの割り当て

ソート中,入力ファイルのレコードはメモリに読み込まれています。Sort では,割り当てられたメモリにすべてのレコードを収めることができない場合は,ソート済みのデータが,1 つまたは複数の一時的作業ファイルに転送されます。Merge の場合は,作業ファイルが使用されません。

作業ファイルの数を変更し,それらのファイルを特定のデバイスに割り当てることにより,ソートの効率を向上させることができます。

作業ファイルをデバイスに割り当てるとき,次の事項に注意します。

9.8.4 ワーキング・セット拡張領域の変更

Sort が作業ファイルを必要とする場合(たとえば,大きなファイルをソートする場合)には,ワーキング・セットを大きくすると,ソート効率が向上します。ただし,システムの負荷が大き過ぎると,ワーキング・セット拡張領域の全ページをプロセスに割り当てられないこともあります。このような場合,オペレーティング・システムが物理メモリとページング・デバイス上のメモリの間でプロセスの一部を転送するときに,ページングが起こることがあります。そのため,プロセスのアクティブな部分だけが物理メモリ内に残ります。過度なページングの発生を避けるためには,プロセスのワーキング・セット拡張領域を小さくします。ワーキング・セット拡張領域を小さくするときは,SET WORKING_SET コマンドを使用します。

9.9 Sort/Merge 修飾子の要約

ここでは,SORT コマンドと MERGE コマンドで使用されるコマンド修飾子について説明します。コマンド修飾子を使用するには,SORT または MERGE コマンドのすぐ後に修飾子を指定します。

/[NO]CHECK_SEQUENCE

MERGE コマンドのみに適用。MERGE 入力ファイル内のレコードの順序を検査する。省略時の設定では,レコードの順序がチェックされる。

また /CHECK_SEQUENCE 修飾子を使用すると,1 つまたは複数(最高で 10 ファイル,高性能 Sort/Merge ユーティリティの場合は 12 ファイルまでサポート)のファイルのレコードがソートされているかどうかチェックすることができる。この場合もレコードは出力ファイルに送られるが,そのファイルは指定する必要がある。レコードが,レコード全体以外のキー・フィールドでソートされているかどうかチェックする場合,順序の他に,キー情報も指定する必要がある。

マージ操作で,レコードの順序をチェックしないようにするには,/NOCHECK_SEQUENCE 修飾子を使用する。


$ MERGE/KEY=(SIZE:4,POSITION:3)/NOCHECK_SEQUENCE - 
_$ PRICE1.DAT,PRICE2.DAT PRICE.LIS 


/NOCHECK_SEQUENCE 修飾子により,入力ファイル PRICE1.DAT および PRICE2.DAT の順序についてはチェックする必要のないことが指定されている。

/COLLATING_SEQUENCE=sequence

文字キー・フィールドに対して,定義されている 3 つの照合順序から 1 つを選択するか,文字キーの比較に使用する国別文字セット(NCS)照合順序の名前を指定する。(高性能 Sort/Merge ユーティリティでは,NCS 照合順序はサポートされていない。NCS 照合順序は,OpenVMS Alpha の将来のリリースでサポートされる予定。)文字は ASCII(省略時),EBCDIC,MULTINATIONAL のいずれかの順序で整列される。


$ SORT/COLLATING_SEQUENCE=MULTINATIONAL - 
_$ NAMES.DAT,NOM.DAT LIST.LIS 


この SORT コマンドでは,MULTINATIONAL 照合順序で入力ファイル NAMES.DAT および NOM.DAT が整列され,出力ファイル LIST.LIS が作成される。

/[NO]DUPLICATES

省略時の設定では,重複キーを持つ複数レコードがすべて保持される。/NODUPLICATES 修飾子を使用すると,重複キーを持つ複数レコードのうち 1 つを除いてすべてが削除される。保持されるレコードは,入力ファイルの順序と同じ順序にならない場合がある。重複レコードの順序を保持するよう指定したい場合は,プログラム・レベルで Sort を起動し,同一キー・ルーチンを指定する。

/STABLE 修飾子と /NODUPLICATES 修飾子は,相互に排他的な関係にある。


$ SORT/KEY=(POSITION:3,SIZE:5,DECIMAL)/NODUPLICATES - 
_$ ACCT1,ACCT2 ACCT.LIS 


この SORT コマンドにより,指定されたキーに従って,2 つの入力ファイルが整列され,同一のキーを持つ複数レコードは,1 つのレコードを除いてすべて消去される。

/KEY=(POSITION:n,SIZE:n[,field,...])

位置,サイズ,ソート順(ASCENDING または DESCENDING),優先順位(NUMBER:n),データ型(文字,バイナリ,h_floating など)を含むキー・フィールドを記述する。省略時の設定では,文字データを持つレコード全体を昇順にソートすることにより,ファイルの並べ替えが行われる。

/KEY 修飾子についての詳細は,第 9.2.1 項 を参照。

/PROCESS=type

(SORTコマンドのみに適用。)内部ソート・プロセスを定義する。/PROCESS 修飾子により,レコード,タグ,アドレス,索引の 4 つのプロセスのうち 1 つを選択することができる。(高性能 Sort/Merge ユーティリティでは,レコード・プロセスのみがサポートされる。タグ,アドレス,索引の各プロセスについては,OpenVMS Alpha の将来のリリースでサポートされる予定。)

/PROCESS 修飾子についての詳細は,第 9.2.6 項 を参照。


$ SORT/KEY=(POS:40,SIZ:2,DESC)/PROCESS=TAG YRENDAVG.DAT - 
_$ DESCYRAVG.LIS 


この Sort 操作では,タグ・ソート・プロセスが使用され,出力ファイル DESCYRAVG.LIS が作成される。

/SPECIFICATION=filespec

(高性能 Sort/Merge ユーティリティでは,この修飾子はサポートされていない。この機能は,OpenVMS Alpha の将来のリリースでサポートされる予定。)

Sort 操作または Merge 操作で使用する Sort 指定ファイルまたは Merge 指定ファイルを識別する。省略時のファイル・タイプは .SRT になる。

指定ファイルの使用方法については,第 9.7 節 および 第 9.9.3 項 を参照。

/[NO]STABLE

省略時の設定では,同一のキーを持つレコードは,出力ファイルで入力ファイルの順序と同じになるとは限らない。/STABLE 修飾子を使用すると,レコードが同じ順序のまま保持される。

/STABLE 修飾子と /NODUPLICATES 修飾子は,相互に排他的な関係にある。


$ SORT/KEY=(POS:1,SIZ:5,DECIMAL)/STABLE PRICESA.DAT, - 
_$ PRICESB.DAT,PRICESC.DAT SUMMARY.LIS 


この Sort 操作では,同一のキーを持つレコードは,PRICESA.DAT にあるものが最初にリストされ,その後 PRICESB.DAT のレコード,さらに PRICESC.DAT のレコードがリストされる。

/[NO]STATISTICS

統計情報の要約が SYS$OUTPUT に出力され,これを最適化に使用することができる。これらの統計情報をファイルに保存するときは,次のコマンドを使用する。


$ DEFINE/USER SYS$ERROR output-file 


統計情報の要約には,次の情報が含まれる。

統計情報 説明
Records read Sort操作またはMerge操作によって読み込まれたレコードの数。
Records sorted Sortを使用したときに処理されたレコードの数。Sort操作またはMerge操作で,指定ファイルを使用して特定のレコードのみを選択した場合,この数値が,読み込まれたレコードの数より少なくなることもある。
Records output 出力ファイルに書き込まれたレコードの数。/NODUPLICATESが選択された場合や,出力レコードが書き込まれたときに入出力エラーが発生した場合,この数値が,ソートされたレコードの数より少なくなることもある。
Working set extent プロセスのワーキング・セット拡張領域のページの数。この値は,ソート・データ構造体のサイズの上限に使用される。この値を調節することにより,Sort操作の効率を向上させることができる。
Virtual memory データを保持するソート・イメージに追加される仮想記憶のページ数。
Direct I/O + buffered I/O この合計値は,データの読み込みおよび書き込みに必要な入出力移動の数になる。この合計値を小さくするほど,整列操作の効率は向上する。
Page faults データがメモリに収まる度合いを示す値。この値が大きいほど,整列操作の効率は低下する。
Elapsed time Sort操作またはMerge操作で使用される,時間,分,秒,1/100秒単位の合計クロック時間。
Input record length この値は,ユーザが指定しない場合レコード管理サービス(OpenVMS RMS)から取得される。
Internal length 内部フォーマット・ノードの,バイト単位のサイズ。これには,キー,データ,長さを保管するワード,長さ,レコード・ファイル・アドレス(RFA),変換されたキーなどが含まれる。
Output record length 出力レコードの長さ。この長さは入力レコードの長さ,ソート・プロセス,必要なレコードの再フォーマットにより計算される。
Sort tree size Sortの内部データ構造体に収まるレコードの数。
Number of initial runs データがメモリに収まる程度を示す1つの指針。
Maximum merge order 同時にマージされるソート文字列の最大数。
Number of merge passes ソートされた出力文字列が作成されるまで,Sortユーティリティが文字列をマージする回数。Number of initial runsとNumber of merge passesにより,データがメモリに収まる程度が示される。これらの値が大きいほど,ワーキング・セットのサイズにデータが収まらなくなり,同時にソートに時間がかかるようになる。
Work file allocation 作業ファイルに使用されるブロックの数。マージ・パスが複数必要な場合,このサイズは,入力ファイル割り当てのサイズの約2倍になる。
Elapsed CPU 整列操作で使用されるCPU時間。入出力オペレーションが終了するのを待つ時間や,別のプロセスが動作しているときにそれを待っている時間などは含まれない。



$ SORT/STATISTICS PRICE1.DAT,PRICE2.DAT PRICE.LIS 


SORT /STATISTICSコマンドを使用すると,次のような統計情報が表示される。


              OpenVMS Sort/Merge Statistics 
 
Records read:         793   Input record length:     80 
Records sorted:       793   Internal length:         80 
Records output:       793   Output record length:    80 
Working set extent:   100   Sort tree size:         412 
Virtual memory:       433   Number of initial runs:   2 
Direct I/O:            22   Maximum merge order:      2 
Buffered I/O:           9   Number of merge passes:   1 
Page faults:         3418   Work file allocation:   114 
Elapsed time: 00:00:05.98   Elapsed CPU:    00:00:03.63 

/WORK_FILES[=n]

(SORT コマンドのみに適用。)1 から 10(高性能 Sort/Merge ユーティリティの場合は,255 ファイルまでサポート)までの任意の数だけ,Sort の作業ファイルの数を増加させ,それぞれの作業ファイルを小さくする。使用可能なディスクが小さすぎる場合,または作業ファイルの大きさと比べてあまりに余裕がない場合,ファイルの数を増やすことにより,Sort 操作の効率を向上させることができる。

作業ファイルは,必要にならない限り作成されない。作業ファイルが必要になった場合は,省略時の設定として,2 つのファイル(SORTWORK0,SORTWORK1)が作成され,SYS$SCRATCH ディレクトリに置かれる。


$ ASSIGN DRA5: SORTWORK0 
$ ASSIGN DB0: SORTWORK1 
$ ASSIGN DB1: SORTWORK2 
$ SORT/KEY=(POS:1,SIZ:80)/WORK_FILES=3 - 
_$ STATS1,STATS2,STATS3,STATS4 SUMMARY.LIS 


この Sort 操作では,入力ファイルが大きなファイルであるため,作業ファイルを 3 つ指定することにより,ソート操作の効率を向上させることができる。

ディレクトリ名を中に含めることにより,作業ファイルをデバイス上の特定のディレクトリに割り当てることもできる。たとえば,SORTWORK0 を DRA5 の [WORKSPACE] ディレクトリに割り当てるとき,次のコマンドを入力する。


$ ASSIGN DRA5:[WORKSPACE] SORTWORK0 


前へ 次へ 目次 索引