-
- Downloads
Fix up rickety handling of relation-truncation interlocks.
Move rd_targblock, rd_fsm_nblocks, and rd_vm_nblocks from relcache to the smgr relation entries, so that they will get reset to InvalidBlockNumber whenever an smgr-level flush happens. Because we now send smgr invalidation messages immediately (not at end of transaction) when a relation truncation occurs, this ensures that other backends will reset their values before they next access the relation. We no longer need the unreliable assumption that a VACUUM that's doing a truncation will hold its AccessExclusive lock until commit --- in fact, we can intentionally release that lock as soon as we've completed the truncation. This patch therefore reverts (most of) Alvaro's patch of 2009-11-10, as well as my marginal hacking on it yesterday. We can also get rid of assorted no-longer-needed relcache flushes, which are far more expensive than an smgr flush because they kill a lot more state. In passing this patch fixes smgr_redo's failure to perform visibility-map truncation, and cleans up some rather dubious assumptions in freespace.c and visibilitymap.c about when rd_fsm_nblocks and rd_vm_nblocks can be out of date.
Showing
- src/backend/access/heap/hio.c 6 additions, 5 deletionssrc/backend/access/heap/hio.c
- src/backend/access/heap/visibilitymap.c 46 additions, 32 deletionssrc/backend/access/heap/visibilitymap.c
- src/backend/access/transam/xlogutils.c 1 addition, 4 deletionssrc/backend/access/transam/xlogutils.c
- src/backend/catalog/storage.c 15 additions, 9 deletionssrc/backend/catalog/storage.c
- src/backend/commands/cluster.c 4 additions, 7 deletionssrc/backend/commands/cluster.c
- src/backend/commands/sequence.c 3 additions, 2 deletionssrc/backend/commands/sequence.c
- src/backend/commands/vacuum.c 2 additions, 8 deletionssrc/backend/commands/vacuum.c
- src/backend/commands/vacuumlazy.c 19 additions, 47 deletionssrc/backend/commands/vacuumlazy.c
- src/backend/executor/execMain.c 4 additions, 3 deletionssrc/backend/executor/execMain.c
- src/backend/storage/freespace/freespace.c 43 additions, 33 deletionssrc/backend/storage/freespace/freespace.c
- src/backend/storage/smgr/smgr.c 25 additions, 18 deletionssrc/backend/storage/smgr/smgr.c
- src/backend/utils/cache/relcache.c 4 additions, 35 deletionssrc/backend/utils/cache/relcache.c
- src/include/commands/vacuum.h 2 additions, 2 deletionssrc/include/commands/vacuum.h
- src/include/storage/smgr.h 12 additions, 1 deletionsrc/include/storage/smgr.h
- src/include/utils/rel.h 21 additions, 10 deletionssrc/include/utils/rel.h
Loading
Please register or sign in to comment