PostgreSQL 8.2系で、大多数のラージオブジェクトを廃棄しました。容器も小さくするにはVACUUM FULLを掛ける必要が有りました。
主にサムネイルの保存に使っています。20万個有ったものを削除し、1000個程が残っただけでした。
しかし、テーブルの容器が5.5GB程まで膨れ上がっていて、通常のVACUUMでは小さくなりません。これも小さくしたいと思いました。
インデックスが入っているのでloidを指定する検索は速いようです。しかし、SELECT COUNTによる数え上げには時間が掛かります。400秒程。通常のVACUUM掛けても検索時間はまったく変わりません。
次のようにSQL文を発行した所、容器が小さくなりました!
REINDEX TABLE pg_largeobject;
VACUUM FULL pg_largeobject;
クエリーは、2272953 ミリ秒で結果なしでうまく帰りました。 ※約38分
掃除前:
2011/12/08 09:57 1,073,741,824 2613
2011/12/07 17:45 1,073,741,824 2613.1
2011/12/08 10:02 1,073,741,824 2613.2
2011/12/08 10:02 1,073,741,824 2613.3
2011/12/08 09:57 1,073,741,824 2613.4
2011/12/08 09:49 225,402,880 2613.5
6 個のファイル 5,594,112,000 バイト
掃除後:
2011/12/08 10:17 638,976 2613
2011/12/08 10:17 0 2613.1
2011/12/08 10:17 0 2613.2
2011/12/08 10:17 0 2613.3
2011/12/08 10:17 0 2613.4
2011/12/08 10:17 0 2613.5
6 個のファイル 638,976 バイト
容器が小さくなり、大幅に使用量が削減されました。