VACUUM FULLとREINDEXはいつ行うべきか?

表題のとおり、みなさん「いつ、何をキッカケに実行してますか」という素朴な疑問。

VACUUM FULL

ひとつ考えたのがpg_freespacemapを使う方法。以下のSQLを実行するとテーブル"tablename"の空き領域(FreeSpace)の割合が求まる。

SELECT pg_size_pretty(cast(avg(avail) as bigint)) as "平均フリースペースサイズ",
 round(avg(avail)/8192 ,2) as "フリースペースの割合", 
count(*) as "総ブロック数"
FROM pg_freespace('tablename');    

(ブロック数が多く、且つ)この割合が大きな場合は、VACUUM FULLすればいいんじゃないという、定量的議論が可能かと。


他に定量的な指標はあるか?




REINDEX*1

インデックスにはpg_freespacemapが使えないので、どうしましょうか?という疑問。

インデックスでは、ページ内の空き領域ではなく、完全に未使用のページが追跡されます。 したがって、その値には意味がなく、単にページが一杯か空かを表します。

http://www.postgresql.jp/document/9.3/html/pgfreespacemap.html


インデックスの場合は空き領域だけじゃなくて、他にも考慮すべきパラメータがあると思うけども、それもよくわからない。よってpgstattupleなんか使えそうで使えない。


アイディア募集中。

*1:某MLでやたらとREINDEXを実行している会社があるが、何故頻繁にやってんだろう?という疑問はさておき