はじめに
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ファイルの自動拡張が行われる前に適切に対応したいものですね。
これらの情報を使えば、セミオートで対応する事も可能かと思います。
安心安全な運用を心がけたいものですね!