Table Bloat (Dead Tuples Above Threshold)
pg_views: pg_stat_user_tables, pg_class
Full detection logic, thresholds, and guided fixes ship in the product.
Book a demo →Overview
Postgres uses MVCC (Multi-Version Concurrency Control) to serve reads without blocking writes. Every UPDATE creates a new row version; the old version becomes a dead tuple. VACUUM reclaims those dead tuples so the space can be reused. When VACUUM can't keep up with the write rate—due to long transactions, aggressive autovacuum thresholds, or high write volume—dead tuples accumulate and the table grows larger than its live data requires.
High bloat means more pages to scan in sequential scans, more I/O for index maintenance, and inflated pg_total_relation_size. For tables with very high write rates, tuning autovacuum_vacuum_scale_factor down to 1% is usually sufficient to prevent runaway bloat.
See this rule in action
Full detection logic, thresholds, and guided fixes ship in the product. The licensed agent runs this check — and all others — continuously against your database, surfaces findings with AI explanations, and surfaces a guided remediation path inside the dashboard.
Book a demo →Common False Positives
- Tables freshly loaded via COPY or INSERT with no prior deletes — n_dead_tup may lag statistics collection; run ANALYZE to refresh.
- Temporary tables and unlogged tables have different vacuum behaviour and are excluded from this rule.
Table Bloat (Dead Tuples Above Threshold) — and 100+ more checks — in the licensed product
Full detection logic, thresholds, and guided fixes ship in the product.
Book a demo →Last updated: 2026-05-13 · View the rule library