PostgreSQL の VACUUM は、いつやるべきか?
不要になったタプルが増えた時に行うべき。
SELECT relname, n_live_tup, n_dead_tup, CASE n_dead_tup WHEN 0 THEN 0 ELSE round(n_dead_tup*100/(n_live_tup+n_dead_tup) ,2) END AS ratio FROM pg_stat_user_tables WHERE relname = 'テーブル名' ;
n_dead_tup が、増えた時→ ratio が 5 % 位なら不要であろう。
あるいは、関数 pgstattuple で求めるべきかな。。
SELECT * FROM pgstattuple('pg_catalog.pg_proc');
列 | 型 | 説明 | |
table_len | bigint | リレーションのバイト単位の物理長 | |
tuple_count | bigint | 有効なタプル数 | |
tuple_len | bigint | 有効なタプルの物理長(バイト単位) | |
tuple_percent | float8 | 有効タプルの割合 | |
dead_tuple_count | bigint | 無効なタプル数 | |
dead_tuple_len | bigint | バイト単位の総不要タプル長 | |
dead_tuple_percent | float8 | 不要タプルの割合 | |
free_space | bigint | バイト単位の総空き領域 | |
free_percent | float8 | 空き領域の割合 |