
はじめに
グローバルのサイズを知る事で、どの程度の期間でどの程度大きくなるかが、おおよそ予測が出来るようになります。
グローバルの成長が予測出来たら、DATファイルの必要サイズも予測する事が可能になります。
今回は、グローバルサイズを算出するコマンドをご紹介致します。
%GSIZE
同コマンドは、実行ネームスペースを選ばない為、どのネームスペースから実行しても問題ありません。
調査の対象は、DATファイル単位になります。
対象DATファイルの全グローバルか、特定のグローバルかを選択する事が可能です。
全グローバル対象とした設定方法
では、実際に全グローバルを対象とした出力コマンドを実行してみましょう。
d ^%GSIZE
SAMPLE>d ^%GSIZE
Directory name: d:\irisdb\sample\ => [DATファイルのフォルダパス入力(D:\IRISDB\SAMPLE-DATA)]
All Globals? No => [y(yes)]
57 items selected from
57 available globals
Show details?? No => [Enter(No)]
Device: [ファイルパス入力(D:\Temp\output\all_global.txt)]
Parameters? "WNS" => [Enter]
「Yes =>」「No =>」と聞かれた場合は、Enterで初期値が入力されます。
「details」に関しては、後ほど詳細に記載致します。
では、出力結果の「all_global.txt」を見てみましょう。
Global Size Display of d:\irisdb\sample-data\
8:00 AM Apr 14 2024
~ 略 ~
developer.data.SampleD 62934 developer.data.SampleI 38187
~ 略 ~
TOTAL: 1116062
「developer.data.SampleD」に対し、62,934と表示されています。
これは、developer.data.SampleDが62,934ブロック使用している意味になります。
ブロックとは、グローバルが格納される箱で、通常のサイズは8KBになります。
そのためグローバルサイズの計算式は下記になります。
w 62934 * 8 / 1024
491.671875
491.67MBのサイズと分かります。
特定のグローバルを対象とした設定方法
次は、グローバルを絞って調査を行いたいと思います。
調査対象のグローバルを入力して下さい。「*」はワイルドカードです。
SAMPLE>d ^%GSIZE
Directory name: d:\irisdb\sample\ => [DATファイルのフォルダパス入力(D:\IRISDB\SAMPLE-DATA)]
All Globals? No => [Enter(No)]
Global ^[対象グローバル入力(developer.data*)]
Global ^[Enter]
22 globals selected from 57 available globals.
Show details?? No => [Enter(No)]
Device: [ファイルパス入力(D:\Temp\output\target_global.txt)]
Parameters? "WNS" => [Enter]
では、出力結果の「target_global.txt」を見てみましょう。
調査対象のグローバルが、全て「developer.data.~」となっている事が分かります。
Global Size Display of d:\irisdb\sample-data\
8:22 AM Apr 14 2024
developer.data.Patient10D 71425 developer.data.Patient10I 50669
~ 略 ~
developer.data.SampleD 62934 developer.data.SampleI 38187
TOTAL: 1116027
DATファイルが巨大な場合、全グローバルを対象とするとかなりの時間がかかります。
その場合は、調査対象のグローバルを絞って実施した方が良いですね。
詳細を表示する(details = yes)
今までのコマンドは、各グローバルの使用ブロック数を表示するだけでした。
通常であれば特に問題無いと思いますが、さらに詳細な情報が必要になる場合があります。
「Show details?? No => 」時に「y」と入力すると、さらに具体的な情報を取得する事が出来ますが、コマンドの完了時間がかなり遅くなるデメリットが存在します。
実際に実行してみましょう。
SAMPLE>d ^%GSIZE
Directory name: d:\irisdb\sample\ => [DATファイルのフォルダパス入力(D:\IRISDB\SAMPLE-DATA)]
All Globals? No => [Enter(No)]
Global ^[対象グローバル入力(developer.data*)]
Global ^[Enter]
22 globals selected from 57 available globals.
Show details?? No => [y(yes)]
Device: [ファイルパス入力(D:\Temp\output\target_global_details.txt)]
Parameters? "WNS" =>
結構な時間がかかりましたが、さて結果は・・・
directory: d:\irisdb\sample-data\
Page: 1 GLOBAL SIZE 14 Apr 2024
8:30 AM
Global Blocks Bytes Used Packing Contig.
-------- -------- --------------- ------- -------
developer.data.Patient10D
71,425 518,177,312 89 % 71,336
~ 略 ~
TOTAL Blocks Bytes Used Packing Contig.
-------- -------- --------------- ------- -------
1,116,027 7,892,925,336 87 % 620,493
項目名 | 説明 |
---|---|
Global | グローバル名称 |
Blocks | 使用ブロック数 (今まで表示していた値) |
Bytes Used | 実際のデータサイズ |
Packing | ブロックの充填率 |
Contig. | ブロックの最大連続数 |
グローバルはブロックに格納されますが、若干余裕を残した状態にしています。
これは、格納したグローバルが増えた場合、100%を超えるとブロックが分割する事になります。
それを防ぐために若干の余裕を残す形になっています。
メンテナンス以外でユーザが充填率を操作する方法はありません。
DATファイル内で、ブロックが連続している最大数が表示されます。
データを連続的に読み込む場合、ブロックが連続している方が効率が良いとされます。
ブロックの分割や、他のグローバルが書き込んだり等々で、自然に使用している上では、中々連続性を得る事は難しいです。
詳細情報で得られる内容が、かなり充実している事が分かります。
特に「Packing」や「Contig.」に関しては、しばらく運用していくと自然と値が下がってきたりしますが、定期的にメンテナンスをする必要性はないです。
メンテナンスの方法に関しては、別途ご紹介いたします。
終わりに
今回は、グローバルのサイズを計るコマンドについてご紹介致しました。
M言語は他のDBと比較すると、かなり高速でデータの書き込みと取得が行えます。
とくにメンテナンスしなくても、その速度をある程度維持する事は可能ですが、可能であれば時折メンテナンスを行う事をお勧めいたします。
快適な環境を維持するのは、気持ちいいですよね。