MBL開発部 Nです。
最近、Postgresqlを運用していて気になった所を調べてみました。
どんな事かと言いますと、10GB程度あるテーブルのデータを大量に削除した際にVacuumをFullオプション付きで行っていないのにもかかわらず、テーブルサイズが縮小し、OSのディスク空き容量も増えるということが二回あり、通常vacuumではOSに領域の返却は行われないと思っていたので一度目は見間違いかなと思っていました。
ドキュメントを見てみると9系のVacuumからこのように記載されています。
(FULLが指定されていない)通常のVACUUMは、単に領域を回収し、そこを再利用可能な状態に変更します。 この形式のコマンドでは排他的ロックが取得されていないため、テーブルへの通常の読み書き操作と並行して実行することができます。 しかし余った領域はオペレーティングシステムには(ほとんどの場合)返されません。 同じテーブル内で再利用できるように保持されるだけです。
ほとんどの場合返却されませんとの事ですので、返却されること自体は稀だけどもおかしくないようです。ではどのような場合に返却されるのでしょうか。