88 #define MAX_IO_CONCURRENCY 1000
91 #define P_NEW InvalidBlockNumber
96 #define BUFFER_LOCK_UNLOCK 0
97 #define BUFFER_LOCK_SHARE 1
98 #define BUFFER_LOCK_EXCLUSIVE 2
123 #define BufferIsValid(bufnum) \
125 AssertMacro((bufnum) <= NBuffers && (bufnum) >= -NLocBuffer), \
126 (bufnum) != InvalidBuffer \
136 #define BufferGetBlock(buffer) \
138 AssertMacro(BufferIsValid(buffer)), \
139 BufferIsLocal(buffer) ? \
140 LocalBufferBlockPointers[-(buffer) - 1] \
142 (Block) (BufferBlocks + ((Size) ((buffer) - 1)) * BLCKSZ) \
156 #define BufferGetPageSize(buffer) \
158 AssertMacro(BufferIsValid(buffer)), \
169 #define BufferGetPage(buffer) ((Page)BufferGetBlock(buffer))
216 #define RelationGetNumberOfBlocks(reln) \
217 RelationGetNumberOfBlocksInFork(reln, MAIN_FORKNUM)
223 extern void PrintPinnedBufs(
void);
287 && (snapshot) != NULL
void CreateAndCopyRelationData(RelFileNode src_rnode, RelFileNode dst_rnode, bool permanent)
void IncrBufferRefCount(Buffer buffer)
void DropDatabaseBuffers(Oid dbid)
bool BgBufferSync(struct WritebackContext *wb_context)
PGDLLIMPORT int effective_io_concurrency
BlockNumber BufferGetBlockNumber(Buffer buffer)
Buffer ReleaseAndReadBuffer(Buffer buffer, Relation relation, BlockNumber blockNum)
PrefetchBufferResult PrefetchBuffer(Relation reln, ForkNumber forkNum, BlockNumber blockNum)
void DropRelFileNodesAllBuffers(struct SMgrRelationData **smgr_reln, int nnodes)
PGDLLIMPORT int bgwriter_flush_after
Size BufferShmemSize(void)
PGDLLIMPORT bool zero_damaged_pages
PGDLLIMPORT Block * LocalBufferBlockPointers
bool IsBufferCleanupOK(Buffer buffer)
Buffer ReadBufferWithoutRelcache(RelFileNode rnode, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy, bool permanent)
PGDLLIMPORT int bgwriter_lru_maxpages
void AtEOXact_Buffers(bool isCommit)
BufferAccessStrategy GetAccessStrategy(BufferAccessStrategyType btype)
struct PrefetchBufferResult PrefetchBufferResult
PGDLLIMPORT int maintenance_io_concurrency
void TestForOldSnapshot_impl(Snapshot snapshot, Relation relation)
void AtProcExit_LocalBuffers(void)
PGDLLIMPORT bool track_io_timing
void InitBufferPool(void)
void CheckPointBuffers(int flags)
bool ReadRecentBuffer(RelFileNode rnode, ForkNumber forkNum, BlockNumber blockNum, Buffer recent_buffer)
bool BufferIsPermanent(Buffer buffer)
bool ConditionalLockBuffer(Buffer buffer)
BlockNumber RelationGetNumberOfBlocksInFork(Relation relation, ForkNumber forkNum)
void ReleaseBuffer(Buffer buffer)
void FreeAccessStrategy(BufferAccessStrategy strategy)
PGDLLIMPORT int32 * LocalRefCount
XLogRecPtr BufferGetLSNAtomic(Buffer buffer)
bool HoldingBufferPinThatDelaysRecovery(void)
void UnlockReleaseBuffer(Buffer buffer)
PrefetchBufferResult PrefetchSharedBuffer(struct SMgrRelationData *smgr_reln, ForkNumber forkNum, BlockNumber blockNum)
void DropRelFileNodeBuffers(struct SMgrRelationData *smgr_reln, ForkNumber *forkNum, int nforks, BlockNumber *firstDelBlock)
void MarkBufferDirty(Buffer buffer)
void InitBufferPoolAccess(void)
PGDLLIMPORT int NLocBuffer
void PrintBufferLeakWarning(Buffer buffer)
void LockBufferForCleanup(Buffer buffer)
void LockBuffer(Buffer buffer, int mode)
void MarkBufferDirtyHint(Buffer buffer, bool buffer_std)
void FlushRelationBuffers(Relation rel)
PGDLLIMPORT int backend_flush_after
PGDLLIMPORT double bgwriter_lru_multiplier
void BufferGetTag(Buffer buffer, RelFileNode *rnode, ForkNumber *forknum, BlockNumber *blknum)
void FlushDatabaseBuffers(Oid dbid)
void FlushRelationsAllBuffers(struct SMgrRelationData **smgrs, int nrels)
PGDLLIMPORT int checkpoint_flush_after
Buffer ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy)
static void TestForOldSnapshot(Snapshot snapshot, Relation relation, Page page)
PGDLLIMPORT char * BufferBlocks
Buffer ReadBuffer(Relation reln, BlockNumber blockNum)
@ RBM_ZERO_AND_CLEANUP_LOCK
bool ConditionalLockBufferForCleanup(Buffer buffer)
void FlushOneBuffer(Buffer buffer)
Assert(fmt[strlen(fmt) - 1] !='\n')
static PgChecksumMode mode
int old_snapshot_threshold
#define XLogRecPtrIsInvalid(r)