zabbix の db の未使用領域を開放する

zabbix の db って要らないアイテム消したときとかに空きができるんですよ。そのアイテムに関する履歴情報とかがごっそり消えますからね。

データが消えてできた未使用領域ですけど放置しておいたらそのままで、すなわちテーブルスペースは小さくなりません。OSのファイルシステム側から見たらでっかいファイルがあるように見えるだけ。このでかいヤツをどうにか縮めたい場合。空き領域を開放してOSに返却したい場合。

ここで DB が Mysql ならたぶん、一旦システム止めて、ダンプ吐いて、テーブル再生成、しか道が無いような気がします。

僕の手元では DB を PostgreSQL にしてしまったので vacuumdb かませば不要領域は開放してくれます。

 

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_centos6-lv_root 5.5G 4.7G 530M 91% /

 

 

#su - postgres
$ vacuumdb -f -z -d zabbix
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_centos6-lv_root 5.5G 4.6G 591M 89% /

 

よし。

PostgreSQL だとこういうメンテがラクチンな気がします。

そもそも商用サポートなしの DB を選ぶなら、単独動作なら DB2 Express-C とかでもいいんじゃないかな。容量制限ねえし。メモリ周りとかいろいろ自動でチューニングしてくれるし。

そういや最近の DB2 には「タイム・トラベル照会」っていうのがあって、削除や更新したデータも日時をベースに裏で覚えておいてくれるようにできる。

たとえば、ショッピングサイトなんかで値段が毎週変わる商品があるとき商品マスタなんかで値付けをどんどん変えていくと、月末の締めのときなど最新の価格表で集計をするとおかしなことになる。

そのため一つの商品についても日付情報込みで複数の情報を持っておくというのを設計レベルで入れておくわけだけども。

そんなことしなくても

 

SELECT price FROM item_master FOR SYSTEM_TIME AS OF '2013-01-05' WHERE item_id='00001'

 

みたいなことができるらしいんですわ。DBMSが履歴情報を持っててくれて、指定した日付んときのテーブル情報でもって情報を出してくれると。へえ。