High dead tuple percentage degrades query performance and bloats tables
warningstorageUpdated Feb 10, 2026
Sources
Technologies:
How to detect:
Tables accumulate dead tuples (from updates and deletes) that PostgreSQL cannot reuse, causing table bloat and slower sequential scans. This occurs when autovacuum cannot keep up with the rate of changes, especially after large batch operations or bulk deletes.
Recommended action:
Check dead tuple percentage with: SELECT relname, n_live_tup, n_dead_tup, round(100.0 * n_dead_tup / NULLIF(n_live_tup + n_dead_tup, 0), 1) AS dead_pct FROM pg_stat_user_tables ORDER BY n_dead_tup DESC LIMIT 15; For tables with high dead_pct, run VACUUM manually. For large tables or high-write workloads, lower autovacuum_vacuum_scale_factor: ALTER TABLE table_name SET (autovacuum_vacuum_scale_factor = 0.05);