• Tom Lane's avatar
    Work around deadlock problems with VACUUM FULL/CLUSTER on system catalogs, · 1ddc2703
    Tom Lane authored
    as per my recent proposal.
    
    First, teach IndexBuildHeapScan to not wait for INSERT_IN_PROGRESS or
    DELETE_IN_PROGRESS tuples to commit unless the index build is checking
    uniqueness/exclusion constraints.  If it isn't, there's no harm in just
    indexing the in-doubt tuple.
    
    Second, modify VACUUM FULL/CLUSTER to suppress reverifying
    uniqueness/exclusion constraint properties while rebuilding indexes of
    the target relation.  This is reasonable because these commands aren't
    meant to deal with corrupted-data situations.  Constraint properties
    will still be rechecked when an index is rebuilt by a REINDEX command.
    
    This gets us out of the problem that new-style VACUUM FULL would often
    wait for other transactions while holding exclusive lock on a system
    catalog, leading to probable deadlock because those other transactions
    need to look at the catalogs too.  Although the real ultimate cause of
    the problem is a debatable choice to release locks early after modifying
    system catalogs, changing that choice would require pretty serious
    analysis and is not something to be undertaken lightly or on a tight
    schedule.  The present patch fixes the problem in a fairly reasonable
    way and should also improve the speed of VACUUM FULL/CLUSTER a little bit.
    1ddc2703
parallel_schedule 3.12 KB