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

前へ | 次へ | 目次 | 索引

## 11.8.2 レコードとフィールドの排除

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

## 11.8.3 作業ファイルの割り当て

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

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

- コマンド行修飾子/WORK_FILES=nを使用することにより，割り当てられた作業ファイルの数が指定変更される。

- 通常，作業ファイルはデバイスSYS$SCRATCHに置かれ，任意の順序でアクセスされる。作業ファイルを特定のデバイスに割り当てる方法として，次の2つの方法がある。

  - 指定ファイルで/WORK_FILES=(device ,...)修飾子を使用すると，作業ファイルが，指定されたデバイスに置かれる。指定ファイル内で/WORK_FILES修飾子を使用する方法についての詳細は， 第 11.9.3 項 を参照。

  - 指定ファイルを使用しない場合，DCLコマンドのASSIGNを使用することによって，作業ファイルを特定のデバイスに割り当てる。
    作業ファイルに対応するユーザ指定デバイス名を識別するときは， SORTWORKn 論理名が使用される。この場合n は0から9までのいずれかの値になる。 (高性能Sort/Mergeユーティリティでは， nは0から254までのいずれかの値になる)。 SORTWORKn 論理名を次のように定義する。

        ASSIGN デバイス: SORTWORKn

    例

        $ ASSIGN WORK$2: SORTWORK1
        $ ASSIGN WORK$3: SORTWORK2

    この例では，SORTWORK1がデバイスWORK$2:として定義され， SORTWORK2がデバイスWORK$3:として定義される。論理名についての詳細は， 第 13 章 を参照。

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

- RAMや大容量ディスクのような，できる限り高速なデバイスに，作業ファイルを割り当てるようにする。

- あまり使用しないデバイスで，もっとも容量のあるものを選択する。

- それぞれの作業ファイルを異なる物理デバイスに割り当て，入力と出力のオーバラップを最大限にする。

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

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

# 11.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修飾子についての詳細は， 第 11.2.1 項 を参照。

/PROCESS=type

> (SORTコマンドのみに適用。) 内部ソート・プロセスを定義する。 /PROCESS修飾子により，レコード，タグ，アドレス，索引の4つのプロセスのうち1つを選択することができる。 (高性能Sort/Mergeユーティリティでは，レコード・プロセスのみがサポートされる。タグ，アドレス，索引の各プロセスについては， OpenVMS Alphaの将来のリリースでサポートされる予定。)
> /PROCESS修飾子についての詳細は， 第 11.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になる。
> 指定ファイルの使用方法については， 第 11.7 節 および 第 11.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

## 11.9.1 入力ファイル修飾子

次の入力修飾子は，SORT または MERGE コマンド行に入力ファイル指定を指定した直後に指定しなければなりません。

/FORMAT=(RECORD_SIZE:n,FILE_SIZE:n)

> 入力ファイルの特性を定義する。レコード・サイズやファイル・サイズを指定または変更できる。入力ファイル修飾子は，Sort または Merge コマンド行の出力ファイル指定の直後に指定します。
> Sortでは，必要なメモリ量を判断するとき， Sort操作に使用する作業ファイルのサイズの他に，入力ファイル・サイズの情報が使用される。このファイル・サイズが未知の場合 (たとえばディスクや標準ANSI磁気テープ上にないファイルをソートしている場合)，非常に大きなファイル・サイズが想定される。
> 次の修飾子の値を指定することができる。

> RECORD_SIZE: n | 入力ファイルの最長レコード長(LRL)をバイト単位で指定する。指定できる最長のレコード長は，ファイル編成により異なる。
> 順次 | 32,767
> 相対 | 16,383
> 索引順次 | 16,362
> | これらの値には，固定長制御付き可変(VFC)形式レコードの制御バイトが含まれる。
> FILE_SIZE: n | 入力ファイル・サイズをブロック単位で指定する。指定できる最大ファイル・サイズは，4,294,967,295ブロックになる。

> 出力ファイルの修飾子としても/FORMATを使用することができる。詳細は 第 11.9.2 項 を参照。
> 例

>     $ SORT/KEY=(POS:40,SIZ:2,DESC) -
>     _$CRA0:YRENDAVG.DAT/FORMAT=(RECORD_SIZE:41,FILE_SIZE:3) -
>     _$DESCYRAVG.LIS

> 入力ファイルYRENDAVG.DATは，ディスク・デバイス上にもANSI磁気テープ上にもないため，ファイル編成を/FORMAT修飾子で記述する必要がある。

前へ | 次へ | 目次 | 索引