Work around deadlock problems with VACUUM FULL/CLUSTER on system catalogs,
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.
index.c (r1.333 -> r1.334)
cluster.c (r1.198 -> r1.199)
indexcmds.c (r1.191 -> r1.192)
index.h (r1.82 -> r1.83)
parallel_schedule (r1.59 -> r1.60)
pgsql-committers by date
|Next:||From: Tom Lane||Date: 2010-02-07 22:52:02|
|Subject: Re: pgsql: Create a "relation mapping" infrastructure to support changing |
|Previous:||From: Simon Riggs||Date: 2010-02-07 22:29:17|
|Subject: Re: pgsql: Create a "relation mapping" infrastructure
to support changing|