Postgres 9.4.5 small table grows into huge size - periodic VACUUM FULL needed
Something is keeping autovacuum from removing those dead tuples.

These can be only three things that keep VACUUM from doing its job:


A long running concurrent transaction. Check with

SELECT pid, datname, usename, state, backend_xmin
FROM pg_stat_activity
WHERE backend_xmin IS NOT NULL
ORDER BY age(backend_xmin) DESC;

An abandoned replication slot. Check with

SELECT slot_name, slot_type, database, xmin
FROM pg_replication_slots
ORDER BY age(xmin) DESC;

An orphaned prepared transaction. Check with

SELECT gid, prepared, owner, database, transaction AS xmin
FROM pg_prepared_xacts
ORDER BY age(transaction) DESC;



But all that would also block VACUUM (FULL) from shrinking the table.  So there must be something extra you are doing when you run VACUUM (FULL).

You have autovacuum enabled, right?

This is what you should do:


Remove whatever is blocking VACUUM.
Make sure autovacuum runs fast enough on that table:

ALTER TABLE status SET (autovacuum_vacuum_cost_delay = 0);



If the data modifications are caused by UPDATE you could also try to get HOT updates. These remove the need for VACUUM. A prerequisite is that the updated column or columns are not indexed.