A closed row changes to archived. Both states remain outside an open-only index, but changing the predicate column blocks HOT in the PostgreSQL 18 B-tree example.

Partial indexes and writes

A partial index filters rows, not columns. An index on id WHERE status = 'open' stores identifiers for open rows; status decides membership without becoming the search key. That distinction matters when estimating maintenance: a column need not appear in the stored key to affect an update’s cost. ...

February 15, 2028 · 5 min · XB Field Notes
A thousand-version bar passes the new threshold of 150 but stops short of the old threshold of 2050, with a cap-off-or-at-least-2050 prerequisite, illustrating eligibility rather than completed cleanup.

Autovacuum eligibility is separate from completion

A busy table produces obsolete versions at a rate its maintenance must accommodate. Lowering an autovacuum trigger can make that table eligible sooner, but eligibility is not completion. A worker must still reach the table, acquire the required locks, and finish enough useful cleanup before the backlog grows again. Measure that whole cycle instead of treating one configuration value as a throughput guarantee. ...

February 4, 2028 · 5 min · XB Field Notes
Session A holds a lock across a blocked connection to waiting session B; observer C points toward the waiting side.

A slower query needs both a plan and a wait check

A formerly fast query can become slow with the same data, statistics, and access plan. Another transaction may hold a lock, the storage cache may be colder, or the application may wait before PostgreSQL even receives the statement. Rechecking the plan is useful, but it belongs inside a broader comparison of where the elapsed time went. Begin by distinguishing time spent doing work from time spent waiting to do it. ...

January 31, 2028 · 5 min · XB Field Notes
A large sparse old-file grid points through a strong-lock symbol to a smaller replacement holding surviving contents.

VACUUM FULL rebuilds a table instead of pruning it

After a large deletion, a PostgreSQL table may retain a large file even when only a small fraction of its rows remain. Ordinary vacuum makes obsolete space reusable; VACUUM FULL rewrites the surviving contents into a new file and rebuilds indexes. That stronger reclamation has a different lock and capacity budget, so it belongs to planned maintenance rather than routine reaction to a large size number. ...

January 3, 2028 · 5 min · XB Field Notes