Cookbook recipe

HOT updates and why fillfactor matters

Applies to PostgreSQL 13–17 Last reviewed May 2026 Grounded in source
Estimated investigation4 min

Scenario

Update-heavy tables bloat their indexes fast — unless HOT (Heap-Only Tuple) updates kick in. Fillfactor leaves room for them. Diagnose it Check the HOT update ratio: SELECT relname, n_tup_upd, n_tup_hot_upd, round(100*n_tup_hot_upd/greatest(n_tup_upd,1),1) AS hot_pct FROM pg_stat_user_tables ORDER…

Investigation Path

Update-heavy tables bloat their indexes fast — unless HOT (Heap-Only Tuple) updates kick in. Fillfactor leaves room for them.

Diagnose it

Check the HOT update ratio:

SELECT relname, n_tup_upd, n_tup_hot_upd,
  round(100*n_tup_hot_upd/greatest(n_tup_upd,1),1) AS hot_pct
FROM pg_stat_user_tables ORDER BY n_tup_upd DESC LIMIT 10;

Why it happens

A HOT update places the new row version on the same page and avoids touching indexes — but only if no indexed column changed and the page has free space. A full page forces a non-HOT update that adds index entries (bloat).

This is a Pro lesson

Get every Learning Pathway and cookbook recipe — grounded in PostgreSQL source code, with diagnostics, fixes, and prevention for each topic.

Continue this lesson to learn:

  • How to fix it
  • Prevent it next time
  • Related & next steps
  • All 36 Learning Pathway lessons
  • 170+ cookbook recipes
  • Source-grounded diagnostics & fixes

Secure checkout Cancel anytime Source-grounded

Career Impact

This scenario builds production judgment and operational confidence under pressure.

Open Career Dashboard →

Keep going

Related & next steps

Was this helpful?

← All cookbook recipes