表題のとおり、みなさん「いつ、何をキッカケに実行してますか」という素朴な疑問。
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を実行している会社があるが、何故頻繁にやってんだろう?という疑問はさておき