【IRIS/Cache】データベースの空き容量を知る

はじめに

IRIS/Cacheを長時間使用していくと、ブロック間ですき間が出来てきたりします。

ブロック間にすき間が出来ると、断片化が起きやすくデータベースの圧縮にも影響が発生します。

そこでデータベースの圧縮作業前に、データ・ブロックの調査等を行いましょう

管理ポータルから確認する

[システムオペレーション] > [データベース] をクリックし、データベースの一覧画面を表示します。

IRIS

調査対象のデータベース名をクリックすると、調査対象の詳細な情報が表示されます。

Cache

Cacheの場合は、画面左上に「空き容量」ボタンがあるので、クリックすると一覧画面が、空き容量を表示する内容に切り替わります。

ターミナルから確認する

d ^DATABASEから確認する

ターミナルを起動し、ネームスペースを「%SYS」に切り替えて「DATABASE」コマンドを実行します。
対象は、「8) Show free space for a database」になります。

zn "%SYS"
d ^DATABASE
%SYS>d ^DATABASE
 
 
 1) Create a database
 2) Edit a database
 3) List databases
 4) Delete a database
 5) Mount a database
 6) Dismount a database
 7) Compact globals in a database
 8) Show free space for a database
 9) Show details for a database
10) Recreate a database
11) Manage database encryption
12) Return unused space for a database
13) Compact free space in a database
14) Defragment a database
15) Show background database tasks
 
Option? [8]
Database directory to show free space for (*=All)? [DATファイルのフォルダパス(D:\IRISDB\SAMPLE-DATA)]
 
Databases Selected
------------------
d:\irisdb\sample-data\
Device: [出力先のファイルパスを入力(D:\Temp\output\freespace.txt)]
Parameters? "WNS" => [Enter]

調査対象が全データベースであれば、「*」を入力して下さい。
今回は、サンプルで使用している「D:\IRISDB\SAMPLE-DATA」にします。

出力先を求められるので、ファイルパスを入力したら結果が出力されます。

                                                        Database Free Space
                                                        Apr 19 2024  8:58 AM
Database                           Max Size  Size    Available %Free   Disk Free
d:\irisdb\sample-data\             無制限    8.53GB  5.36GB    63      464.21GB

管理ポータルで確認した値と相違ないですね。

%FREECNTから確認する

ターミナルを起動し、ネームスペースを「%SYS」に切り替えて「%FREECNT」コマンドを実行します。
今回はデータベースを指定せず、全データベースを対象としてみます。

zn "%SYS"
d ^%FREECNT
%SYS>d ^%FREECNT
 
Database directory to show free space for (*=All)? [*]
 
Databases Selected
------------------
d:\iris\mgr\
d:\iris\mgr\hscustom\
d:\iris\mgr\hslib\
d:\iris\mgr\hssys\
d:\iris\mgr\irisaudit\
d:\iris\mgr\irislib\
d:\iris\mgr\irislocaldata\
d:\iris\mgr\iristemp\
d:\iris\mgr\user\
d:\irisdb\sample-data\
d:\irisdb\sample\
Device: [出力先のファイルパスを入力(D:\Temp\output\freecnt.txt)]
Parameters? "WNS" =>

出力したファイルを確認してみます。

                                                        Database Free Space
                                                        Apr 19 2024  2:32 PM
Database                           Max Size  Size    Available %Free   Disk Free
d:\iris\mgr\                       無制限    200MB   29MB      15      471.94GB
d:\iris\mgr\hscustom\              無制限    21MB    7.5MB     36      471.94GB
d:\iris\mgr\hslib\                 無制限    1.29GB  142MB     11      471.94GB
d:\iris\mgr\hssys\                 無制限    21MB    8.6MB     41      471.94GB
d:\iris\mgr\irisaudit\             無制限    11MB    8.7MB     79      471.94GB
d:\iris\mgr\irislib\               無制限    369MB   0.37MB    0    <- 471.94GB
d:\iris\mgr\irislocaldata\         無制限    21MB    18MB      86      471.94GB
d:\iris\mgr\iristemp\              無制限    1MB     0.055MB   6       471.94GB
d:\iris\mgr\user\                  無制限    1MB     0.23MB    23      471.94GB
d:\irisdb\sample-data\             無制限    8.53GB  5.36GB    63      471.94GB
d:\irisdb\sample\                  無制限    114MB   91MB      80      471.94GB

全データベースの空き状況が一覧で出力されました。
個人的には、こちらのコマンドの方が楽ですね。

SYS.Databaseから確認する

SYS.Database.clsには、様々な関数やプロパティがあるので、それらを使って空き容量を確認したいと思います。

ではネームスペースを「%SYS」に変更しましょう。

利用可能空き容量

s path = "D:\IRISDB\SAMPLE-DATA" // 任意で変更して下さい。

zn "%SYS"
w ##class(SYS.Database).GetFreeSpace(path,.free,.freeblock)
w free,",",freeblock
w ##class(SYS.Database).GetDatabaseFreeSpace(path,.free)
w free
%SYS>w ##class(SYS.Database).GetFreeSpace("D:\IRISDB\SAMPLE-DATA",.free,.freeblock)
1
%SYS>w free,",",freeblock
5487,702360

%SYS>w ##class(SYS.Database).GetDatabaseFreeSpace("D:\IRISDB\SAMPLE-DATA",.free)
1
%SYS>w free
5487

GetFreeSpace() or GetDatabaseFreeSpace()どちらでも取得可能です。
GetFreeSpaceは、ついでに空きブロック数も数えるのでお好みで使用して下さい。

取得した値はMBなので、GBに変換すると5.36GBになります。

w 5487/1024
5.3583984375(GB)

DATファイルのサイズ、最大サイズ

s path = "D:\IRISDB\SAMPLE-DATA" // 任意で変更して下さい。

zn "%SYS"
s obj = ##class(SYS.Database).%OpenId(path)
w obj.Size
w obj.MaxSize
%SYS>s obj = ##class(SYS.Database).%OpenId("D:\IRISDB\SAMPLE-DATA")              
%SYS>w obj.Size
8734
%SYS>w obj.MaxSize
0

DATファイルがあるフォルダパスを引数とすることで、DATファイルの情報が手に入ります。
Sizeで取得した値は、単位がMBなので、GBに変換すると8.53GBになりますね。

w 8734/1024
8.529296875

MAXサイズに関しては、0=無制限です。

ディスクの空き容量

ディスクの空き容量は、SYS.Database.clsではないので、%File(%Library.FIle)を使用します。

s dir = "D:\"

zn "%SYS"
d ##class(%File).GetDirectorySpace(dir, .freeSpace, .totalSpace,2)
w freeSpace,",",totalSpace
%SYS>d ##class(%File).GetDirectorySpace("D:\", .freeSpace, .totalSpace,2)
 
%SYS>w freeSpace,",",totalSpace
464.22,511.87

一致している事が確認できます。

おわりに

管理ポータル・ターミナルの両方で、データベースの空き容量を確認する方法をご紹介しました。

定期的に各DATファイルの状況を観察して、DATファイルの自動拡張が行われる前に適切に対応したいものですね。

これらの情報を使えば、セミオートで対応する事も可能かと思います。

安心安全な運用を心がけたいものですね!