複数索引作成ユーティリティ(#MIXGN)
-
複数索引順編成ファイルを保守するときに使います。A−VX RDBの基本表を保守するときにも使います。(A−VX RDBの基本表の実体は複数索引順編成ファイルであることを思い出してください。)
同じ機能が簡易操作ユーティリティ(#ABC)にあるので、そちらを使用しても良いです。
複数索引作成ユーティリティは2つの機能があります。
2つの機能についてはNECの正式なマニュアルの「互換操作法ガイドブック≪パラメータ編≫」に書いてあるので、ここでは補足程度の説明のみとします。
- ●キーファイルの作成
-
複数索引順編成ファイルは、データファイルとキーファイル(キーファイルは最大8個)に分かれています。
分かれているので、これらのファイルの間の情報が不一致になることがよくあります。バグが原因で、ということもあるかもしれませんが、通常は正しい作業の中で不一致になっていることが多いです。
ファイルのアクセス速度を上げるための1つの手段として、キーファイルの属性が「同時更新しない(NON UPDATE)」や「実行時生成(ON DEMAND)」になっていることがあります。キーファイルがこれらの属性になっているとデータファイルが更新されてもキー情報の更新を行わないことがあるので、データファイルとキーファイルの情報が不一致になることがあります。
正しい作業で不一致になっていたとしても、データファイルとキーファイルの情報が不一致ではまずいので、どこかのタイミングで一致させる必要があります。このときに複数索引作成ユーティリティを使うのです。
他にもキーファイルがオーバーフローしたときに、復旧の為にキーファイルを一旦削除して大きなサイズで再定義することがありますが、そのときも再定義した後に複数索引作成ユーティリティでキーファイルの作成を行います。
ファイルに書き込み中にサーバ自体が落ちちゃって、という時も不一致になるかもしれません。
- ●データファイルの再編成
-
ファイルの中のデータの1セットをレコードという単位で表します。例えば「社員」というファイルがあって、そこに社員名、社員番号、性別、役職、年齢が入ることになっているとします。「山田太郎、0001、男、課長、30」で1セットなので、これで1レコードです。
もし山田さんが退職することになれば、山田さんの情報は不用になるので、社員ファイルから山田さんのレコードは削除することになるでしょう。
複数索引順編成ファイルもですが、A−VXでは、レコードを削除してもすぐにはレコードを消してしまいません。「削除しましたよ」印だけ付けて、データ自体は残っています。このレコードを削除レコードといいます。
Windowsのごみ箱みたいなものだと思ってください。Windowsのごみ箱は、ファイルを削除しても本当に削除せずに、一旦ごみ箱に入れておきます。
A−VXはレコードを削除しても、すぐに本当にレコードを削除しません。残っています。Windowsではマウスを何回かクリックすればごみ箱からファイルを復活することができますが、A−VXの場合はファイル保守ユーティリティ等を使ってレコード復活作業を行うことになります。(けっこう大変です。)
Windowsのごみ箱はいっぱいになると自動的に古いものから消えていったりしますが、A−VXの削除レコードは自動的に消えたりしません。ファイルのレコードを追加したり削除したりしていると、削除レコードがどんどん増えていって、そのうちに「有効なデータの入ったレコード」と「削除レコード」でファイルがいっぱいになってしまいます。
削除レコードは本来要らないものなので、Windowsのごみ箱に入ったファイルのようにきれいさっぱり片付けたい。削除レコードが無くなれば、その分だけ新しいレコードを追加できるようになります。
この削除レコードの片付けを行うためのユーティリティが複数索引作成ユーティリティです。
ファイルがいっぱいになって、もうレコードを追加できないことを「ファイルオーバフロー」または単に「オーバフロー」といいます。ファイルオーバーフローになる状態は2種類あり、1つは「ファイル内に削除レコードが残っていてファイルオーバフロー」となっている状態、もう1つは「削除レコードが1つも無いのにファイルオーバフロー」となっている状態です。
「削除レコードが残っていてファイルオーバーフロー」のときは、複数索引作成ユーティリティや簡易操作ユーティリティで削除レコードを片付けてしまえば、空いた場所にまたレコードを追加することができます。
一方「削除レコードが1つも無いのにファイルオーバーフロー」の場合は、片付けるべき削除レコードが無いので、複数索引作成ユーティリティや簡易操作ユーティリティを使っても無駄です。
ファイルの拡張、ファイルの追加を行うか、あるいは大きいファイルで作り直すということになります。
Windowsでもハードディスクがいっぱいになった時に、ごみ箱にファイルが残っていたら、ごみ箱を空にするとまたファイルが入れられるようになることがあります。それと同じです。
ごみ箱に何も入っていないのにハードディスクがいっぱいになったら、別のドライブを追加してそこにファイルを入れるか、もっと大きい容量のハードディスクに交換するしかないということと同じです。(それでなければ、不用なファイル(レコード)を削除して容量を空けるか。)
A−VX RDBの基本表の実体の複数索引順編成ファイルを再編成する時、更新後ジャーナルを使用(ジャーナル機能とトランザクション機能を両方とも利用している場合)しているときは、再編成するタイミングには注意が必要です。(詳細はNECのリレーショナル型データベース説明書を参照。)
- ●実際にどのように使われているか
-
複数索引作成ユーティリティは、上記のようにエラーから回復するときにも使いますが、主に高速化テクニックの1つとして使われることが多いです。ただし、それなりに面倒なので、専任でシステム運用してますというような人がいないと難しいかもしれません。
データファイルを再編成して無駄に残っている削除レコードを消すということは、たいていの場合ファイルアクセスが速くなります。
また、プログラム中で昇順または降順で読み込んでいることが多いならば、そのキーでソートして、キーファイル再編成しておけば読み込みが速くなります。(複数索引順編成ファイルの場合は、ソートユーティリティ(#SORT)を使うと複数索引作成ユーティリティ(#MIXGN)が自動実行します。)
従って、定期的(夜間バッチ等)に再編成を行うようにシステムを作っておけば、(たぶんちょっとだけ)業務処理が速くなるわけです。
キーファイルが複数ある場合は、全部を同時更新にすると書き込み時に遅くなるので、月末処理等でしか使わないようなキーはあえて同時更新せず、暇な時間帯にバッチでキーファイル再作成、あるいは実行時生成にしたりします。(入力したキー値が同じ値にならないような工夫が必要ですが。)
- ●使い方の例