diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2007-05-30 20:12:03 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2007-05-30 20:12:03 +0000 |
commit | d526575f893c1a4e05ebd307e80203536b213a6d (patch) | |
tree | 529be7e5571f622bad1daab0d02de0c6669e9b81 /src/include/storage/buf.h | |
parent | 0a6f2ee84de589e14941da640fb686c7eda7be01 (diff) |
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.
Diffstat (limited to 'src/include/storage/buf.h')
-rw-r--r-- | src/include/storage/buf.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/include/storage/buf.h b/src/include/storage/buf.h index 94da564d1eb..a812a9e269a 100644 --- a/src/include/storage/buf.h +++ b/src/include/storage/buf.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/storage/buf.h,v 1.21 2007/01/05 22:19:57 momjian Exp $ + * $PostgreSQL: pgsql/src/include/storage/buf.h,v 1.22 2007/05/30 20:12:03 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -36,4 +36,11 @@ typedef int Buffer; */ #define BufferIsLocal(buffer) ((buffer) < 0) +/* + * Buffer access strategy objects. + * + * BufferAccessStrategyData is private to freelist.c + */ +typedef struct BufferAccessStrategyData *BufferAccessStrategy; + #endif /* BUF_H */ |