-
- Downloads
Make large sequential scans and VACUUMs work in a limited-size "ring" of
buffers, rather than blowing out the whole shared-buffer arena. Aside from avoiding cache spoliation, this fixes the problem that VACUUM formerly tended to cause a WAL flush for every page it modified, because we had it hacked to use only a single buffer. Those flushes will now occur only once per ring-ful. The exact ring size, and the threshold for seqscans to switch into the ring usage pattern, remain under debate; but the infrastructure seems done. The key bit of infrastructure is a new optional BufferAccessStrategy object that can be passed to ReadBuffer operations; this replaces the former StrategyHintVacuum API. This patch also changes the buffer usage-count methodology a bit: we now advance usage_count when first pinning a buffer, rather than when last unpinning it. To preserve the behavior that a buffer's lifetime starts to decrease when it's released, the clock sweep code is modified to not decrement usage_count of pinned buffers. Work not done in this commit: teach GiST and GIN indexes to use the vacuum BufferAccessStrategy for vacuum-driven fetches. Original patch by Simon, reworked by Heikki and again by Tom.
Showing
- src/backend/access/hash/hash.c 6 additions, 4 deletionssrc/backend/access/hash/hash.c
- src/backend/access/hash/hashovfl.c 49 additions, 15 deletionssrc/backend/access/hash/hashovfl.c
- src/backend/access/hash/hashpage.c 30 additions, 2 deletionssrc/backend/access/hash/hashpage.c
- src/backend/access/heap/heapam.c 34 additions, 4 deletionssrc/backend/access/heap/heapam.c
- src/backend/access/nbtree/nbtree.c 4 additions, 3 deletionssrc/backend/access/nbtree/nbtree.c
- src/backend/access/transam/xlog.c 31 additions, 1 deletionsrc/backend/access/transam/xlog.c
- src/backend/catalog/index.c 2 additions, 1 deletionsrc/backend/catalog/index.c
- src/backend/commands/analyze.c 9 additions, 3 deletionssrc/backend/commands/analyze.c
- src/backend/commands/vacuum.c 52 additions, 37 deletionssrc/backend/commands/vacuum.c
- src/backend/commands/vacuumlazy.c 13 additions, 5 deletionssrc/backend/commands/vacuumlazy.c
- src/backend/postmaster/autovacuum.c 16 additions, 5 deletionssrc/backend/postmaster/autovacuum.c
- src/backend/storage/buffer/README 47 additions, 28 deletionssrc/backend/storage/buffer/README
- src/backend/storage/buffer/bufmgr.c 98 additions, 76 deletionssrc/backend/storage/buffer/bufmgr.c
- src/backend/storage/buffer/freelist.c 255 additions, 43 deletionssrc/backend/storage/buffer/freelist.c
- src/backend/storage/buffer/localbuf.c 24 additions, 15 deletionssrc/backend/storage/buffer/localbuf.c
- src/backend/tcop/utility.c 2 additions, 2 deletionssrc/backend/tcop/utility.c
- src/include/access/genam.h 2 additions, 1 deletionsrc/include/access/genam.h
- src/include/access/hash.h 8 additions, 3 deletionssrc/include/access/hash.h
- src/include/access/relscan.h 2 additions, 1 deletionsrc/include/access/relscan.h
- src/include/access/xlog.h 2 additions, 1 deletionsrc/include/access/xlog.h
Loading
Please register or sign in to comment