2011年12月8日木曜日

VACUUM FULL on PostgreSQL 8.2

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 バイト


容器が小さくなり、大幅に使用量が削減されました。