In some situations the PostgreSQL stats collector process will have high I/O. More accurately; it has I/O that the administrator thinks is excessive - it really may not be.

In one circumstance, the complaint was caused by a steady 1.8KB/s write over a 24h period. That really is not very much for a large; active database.

Regardless, to reduce the I/O required by PostgreSQL there are a few tricks.

Checking I/O

The tool iotop is very good a measuring and displaying the I/O.

~ # iotop -o
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
27709 be/4 postgres    0.00 B/s 1381.06 K/s  0.00 %  1.97 % postgres: stats collector process
Total DISK READ: 0.00 B/s | Total DISK WRITE: 1381.52 K/s

Disable Autovacuum

Update postgresql.conf with the following setting.

autovacuum = off

Make this change and restart the PostgreSQL server; the I/O for stats collector should now be near zero. This may be a bit extreme; the autovacuum tool can be useful (but your DBA should decide).

Shrink Autovacuum

autovacuum = on
log_autovacuum_min_duration = 200
autovacuum_max_workers = 1
autovacuum_naptime = 960      # 16 minutes
autovacuum_vacuum_threshold = 128
autovacuum_analyze_threshold = 256

See Also