はじめに
Cacheの古いバージョンでは、コマンド自体がバグっているのでコマンドの実施は控えて下さい。
データベースから特定のグローバルを削除すると、櫛の歯が抜けたようにデータブロックが歯抜けになります。
また、肥大化したデータベース(DATファイル)は、グローバルの削除と共に縮小する事はありません。
放置すると無駄にストレージを圧迫する事になります。
今回は、古参Cacheユーザ間では絶対に禁止とまで謳われた、レジェンドコマンド「データベースの縮小」をご紹介いたします。
実行前準備
データブロックの整理
縮小コマンドは、データベース後方の空きスペースを削除する事により、ファイルサイズを小さくします。
データベース後方に、縮小したい分の空きスペースがあれば、特に問題無くコマンドが実行できます。
ただ、拡張を続けたデータベースなどは、削除するべき後方のスペースがないケースが多いです。
データベースの後方に空きスペースを作る方法は2つあります。
- デフラグを行う
- データブロックを移動させる
デフラグを行う
デフラグに関しては記事にしているので、そちらを参照して下さい。
データブロックを移動させる
データベースの後方に空きスペースを作成するコマンドの紹介になります。
ネームスペースを「%SYS」にし、「DATABASE」コマンドを実行します。
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? [13]
Database directory? [DATファイルのフォルダパス入力(D:\IRISDB\SAMPLE-DATA)]
Current Size: 8734 MB
Total freespace: 5729 MB
Freespace at end of file: 0 MB
Target freespace at end of file, in MB (0-5729): [5729]
「13) Compact free space in a database」を実行します。
対象のデータベースを入力し、空きスペースのサイズを入力します。
今回は、限界(5729MB)まで空きスペースを作成したいため、5729を入力しました。
------------------------------------------------------------------------------
データベース容量を圧縮, ID=4, as of 2024-04-20 14:44:03
------------------------------------------------------------------------------
Start Time: 2024-04-20 14:44:02
Namespace: %SYS
State: Done (PID: 348)
データベース: d:\irisdb\sample-data\
Progress: 5729 / 5729 ファイル末尾の MB 空き容量 (100.00%)
|############################################################|
ブロックをスキャンしました: 3891
Final Status: OK
------------------------------------------------------------------------------
データベース容量を圧縮 ended (see status above)
作業自体はすぐ完了します。
移動するだけなので、デフラグとは大きく異なる点になります。
充填率を上げる
ついでなので、データ・ブロックの充填率も変更しておきましょう。
「%GSIZE」の詳細で取得できる「Packing」に該当します。
コマンドは同じく「DATABASE]コマンドで、「7) Compact globals in a 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? [7]
Database directories to compact? [DATファイルのフォルダパス入力(D:\IRISDB\SAMPLE-DATA)]
Databases Selected
------------------
d:\irisdb\sample-data\
All Globals? Yes => [Enter(yes)]
55 items selected from
55 available globals
How full do you want the database blocks? 90 => [Enter]
Display compacted globals? No => [Enter]
Device: [ファイルパス入力(D:\Temp\output\compact_global2.txt)]
Parameters? "WNS" => [Enter]
Confirm compaction of databases? Yes => [Enter]
処理時間が結構かかるので、実行はお好みでお願い致します。
縮小コマンド
縮小コマンドも同様に「DATABASE]コマンドになります。
「12) Return unused space for a 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? [12]
Database directory? [DATファイルのフォルダパス入力(D:\IRISDB\SAMPLE-DATA)]
Current size 8734MB
Specify a desired file size (in MB), or 0 to return all: [0]
Returning space...
Database d:\irisdb\sample-data\ file size is now 3004MB
対象のデータベースを入力し、指定のファイルサイズ(MB)を入力します。
今回は最大限小さくしたい為、「0」を入力しました。
8.52GBあったデータベースが、2.93GBまで縮小する事が出来ました。
これでストレージにも少しだけ余裕が出来ましたね。
おわりに
データベースのメンテナンスは、システム運用上知っておいた方が良い知識となります。
長時間使用してもパフォーマンスの低下に関しては気にする必要はありません。
が、開発に関しては、結構データベースの内容が残念な事になっていたりします。
たまにはデータベースをメンテナンスする時間を使っても良いですね。