diff options
author | Robert Haas <rhaas@postgresql.org> | 2017-08-21 14:43:00 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2017-08-21 14:17:39 -0400 |
commit | 79ccd7cbd5ca44bee0191d12e9e65abf702899e7 (patch) | |
tree | 61870b5ef1e67989c29ab070c11378e8522330c9 /src | |
parent | 66ed3829df959adb47f71d7c903ac59f0670f3e1 (diff) | |
download | postgresql-79ccd7cbd5ca44bee0191d12e9e65abf702899e7.tar.gz postgresql-79ccd7cbd5ca44bee0191d12e9e65abf702899e7.zip |
pg_prewarm: Add automatic prewarm feature.
Periodically while the server is running, and at shutdown, write out a
list of blocks in shared buffers. When the server reaches consistency
-- unfortunatey, we can't do it before that point without breaking
things -- reload those blocks into any still-unused shared buffers.
Mithun Cy and Robert Haas, reviewed and tested by Beena Emerson,
Amit Kapila, Jim Nasby, and Rafia Sabih.
Discussion: http://postgr.es/m/CAD__OugubOs1Vy7kgF6xTjmEqTR4CrGAv8w+ZbaY_+MZeitukw@mail.gmail.com
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/storage/buffer/freelist.c | 17 | ||||
-rw-r--r-- | src/include/storage/buf_internals.h | 1 | ||||
-rw-r--r-- | src/tools/pgindent/typedefs.list | 2 |
3 files changed, 20 insertions, 0 deletions
diff --git a/src/backend/storage/buffer/freelist.c b/src/backend/storage/buffer/freelist.c index 9d8ae6ae8e1..f033323cfff 100644 --- a/src/backend/storage/buffer/freelist.c +++ b/src/backend/storage/buffer/freelist.c @@ -169,6 +169,23 @@ ClockSweepTick(void) } /* + * have_free_buffer -- a lockless check to see if there is a free buffer in + * buffer pool. + * + * If the result is true that will become stale once free buffers are moved out + * by other operations, so the caller who strictly want to use a free buffer + * should not call this. + */ +bool +have_free_buffer() +{ + if (StrategyControl->firstFreeBuffer >= 0) + return true; + else + return false; +} + +/* * StrategyGetBuffer * * Called by the bufmgr to get the next candidate buffer to use in diff --git a/src/include/storage/buf_internals.h b/src/include/storage/buf_internals.h index b768b6fc962..300adfcf9e8 100644 --- a/src/include/storage/buf_internals.h +++ b/src/include/storage/buf_internals.h @@ -317,6 +317,7 @@ extern void StrategyNotifyBgWriter(int bgwprocno); extern Size StrategyShmemSize(void); extern void StrategyInitialize(bool init); +extern bool have_free_buffer(void); /* buf_table.c */ extern Size BufTableShmemSize(int size); diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index 8166d86ca1d..a4ace383fac 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -138,6 +138,7 @@ AttrDefault AttrNumber AttributeOpts AuthRequest +AutoPrewarmSharedState AutoVacOpts AutoVacuumShmemStruct AutoVacuumWorkItem @@ -218,6 +219,7 @@ BlobInfo Block BlockId BlockIdData +BlockInfoRecord BlockNumber BlockSampler BlockSamplerData |