-
- Downloads
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.
Showing
- src/backend/catalog/index.c 87 additions, 56 deletionssrc/backend/catalog/index.c
- src/backend/commands/cluster.c 1 addition, 2 deletionssrc/backend/commands/cluster.c
- src/backend/commands/indexcmds.c 2 additions, 2 deletionssrc/backend/commands/indexcmds.c
- src/include/catalog/index.h 2 additions, 2 deletionssrc/include/catalog/index.h
- src/test/regress/parallel_schedule 2 additions, 5 deletionssrc/test/regress/parallel_schedule
Loading
Please register or sign in to comment