58 #define WRITEBACK_MAX_PENDING_FLUSHES 256
61 #ifdef HAVE_SYNC_FILE_RANGE
62 #define DEFAULT_CHECKPOINT_FLUSH_AFTER 32
63 #define DEFAULT_BACKEND_FLUSH_AFTER 16
64 #define DEFAULT_BGWRITER_FLUSH_AFTER 64
66 #define DEFAULT_CHECKPOINT_FLUSH_AFTER 0
67 #define DEFAULT_BACKEND_FLUSH_AFTER 0
68 #define DEFAULT_BGWRITER_FLUSH_AFTER 0
93 #define MAX_IO_CONCURRENCY 1000
96 #define P_NEW InvalidBlockNumber
101 #define BUFFER_LOCK_UNLOCK 0
102 #define BUFFER_LOCK_SHARE 1
103 #define BUFFER_LOCK_EXCLUSIVE 2
128 #define BufferIsValid(bufnum) \
130 AssertMacro((bufnum) <= NBuffers && (bufnum) >= -NLocBuffer), \
131 (bufnum) != InvalidBuffer \
141 #define BufferGetBlock(buffer) \
143 AssertMacro(BufferIsValid(buffer)), \
144 BufferIsLocal(buffer) ? \
145 LocalBufferBlockPointers[-(buffer) - 1] \
147 (Block) (BufferBlocks + ((Size) ((buffer) - 1)) * BLCKSZ) \
161 #define BufferGetPageSize(buffer) \
163 AssertMacro(BufferIsValid(buffer)), \
174 #define BufferGetPage(buffer) ((Page)BufferGetBlock(buffer))
213 #define RelationGetNumberOfBlocks(reln) \
214 RelationGetNumberOfBlocksInFork(reln, MAIN_FORKNUM)
220 extern void PrintPinnedBufs(
void);
283 && (snapshot) !=
NULL
void IncrBufferRefCount(Buffer buffer)
void PrintBufferLeakWarning(Buffer buffer)
static void TestForOldSnapshot(Snapshot snapshot, Relation relation, Page page)
void FlushDatabaseBuffers(Oid dbid)
BufferAccessStrategy GetAccessStrategy(BufferAccessStrategyType btype)
bool ComputeIoConcurrency(int io_concurrency, double *target)
void AtEOXact_Buffers(bool isCommit)
bool HoldingBufferPinThatDelaysRecovery(void)
void FlushRelationBuffers(Relation rel)
void UnlockReleaseBuffer(Buffer buffer)
PGDLLIMPORT char * BufferBlocks
int checkpoint_flush_after
PGDLLIMPORT int32 * LocalRefCount
void MarkBufferDirty(Buffer buffer)
Buffer ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy)
Size BufferShmemSize(void)
BlockNumber BufferGetBlockNumber(Buffer buffer)
int effective_io_concurrency
void InitBufferPool(void)
bool ConditionalLockBufferForCleanup(Buffer buffer)
int bgwriter_lru_maxpages
void InitBufferPoolBackend(void)
PGDLLIMPORT int NLocBuffer
void DropRelFileNodesAllBuffers(RelFileNodeBackend *rnodes, int nnodes)
double bgwriter_lru_multiplier
bool BgBufferSync(struct WritebackContext *wb_context)
Buffer ReadBufferWithoutRelcache(RelFileNode rnode, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy)
void AtProcExit_LocalBuffers(void)
void LockBuffer(Buffer buffer, int mode)
XLogRecPtr BufferGetLSNAtomic(Buffer buffer)
void InitBufferPoolAccess(void)
Buffer ReleaseAndReadBuffer(Buffer buffer, Relation relation, BlockNumber blockNum)
void DropRelFileNodeBuffers(RelFileNodeBackend rnode, ForkNumber forkNum, BlockNumber firstDelBlock)
#define XLogRecPtrIsInvalid(r)
void PrefetchBuffer(Relation reln, ForkNumber forkNum, BlockNumber blockNum)
void FlushOneBuffer(Buffer buffer)
bool BufferIsPermanent(Buffer buffer)
bool ConditionalLockBuffer(Buffer buffer)
void BufferGetTag(Buffer buffer, RelFileNode *rnode, ForkNumber *forknum, BlockNumber *blknum)
#define Assert(condition)
BlockNumber RelationGetNumberOfBlocksInFork(Relation relation, ForkNumber forkNum)
void DropDatabaseBuffers(Oid dbid)
void CheckPointBuffers(int flags)
void ReleaseBuffer(Buffer buffer)
int old_snapshot_threshold
Buffer ReadBuffer(Relation reln, BlockNumber blockNum)
void MarkBufferDirtyHint(Buffer buffer, bool buffer_std)
void TestForOldSnapshot_impl(Snapshot snapshot, Relation relation)
void LockBufferForCleanup(Buffer buffer)
bool HeapTupleSatisfiesMVCC(HeapTuple htup, Snapshot snapshot, Buffer buffer)
PGDLLIMPORT Block * LocalBufferBlockPointers
void FreeAccessStrategy(BufferAccessStrategy strategy)
int target_prefetch_pages