114#define BMR_REL(p_rel) \
115 ((BufferManagerRelation){.rel = p_rel})
116#define BMR_SMGR(p_smgr, p_relpersistence) \
117 ((BufferManagerRelation){.smgr = p_smgr, .relpersistence = p_relpersistence})
118#define BMR_GET_SMGR(bmr) \
119 (RelationIsValid((bmr).rel) ? RelationGetSmgr((bmr).rel) : (bmr).smgr)
122#define READ_BUFFERS_ZERO_ON_ERROR (1 << 0)
124#define READ_BUFFERS_ISSUE_ADVICE (1 << 1)
126#define READ_BUFFERS_IGNORE_CHECKSUM_FAILURES (1 << 2)
128#define READ_BUFFERS_SYNCHRONOUSLY (1 << 3)
168#define DEFAULT_EFFECTIVE_IO_CONCURRENCY 16
169#define DEFAULT_MAINTENANCE_IO_CONCURRENCY 16
173#define MAX_IO_COMBINE_LIMIT PG_IOV_MAX
174#define DEFAULT_IO_COMBINE_LIMIT Min(MAX_IO_COMBINE_LIMIT, (128 * 1024) / BLCKSZ)
195#define MAX_IO_CONCURRENCY 1000
198#define P_NEW InvalidBlockNumber
203#define BUFFER_LOCK_UNLOCK 0
204#define BUFFER_LOCK_SHARE 1
205#define BUFFER_LOCK_EXCLUSIVE 2
269#ifdef USE_ASSERT_CHECKING
270extern void AssertBufferLocksPermitCatalogRead(
void);
291#define RelationGetNumberOfBlocks(reln) \
292 RelationGetNumberOfBlocksInFork(reln, MAIN_FORKNUM)
320 int32 *buffers_flushed,
321 int32 *buffers_skipped);
323 int32 *buffers_evicted,
324 int32 *buffers_flushed,
325 int32 *buffers_skipped);
417 return (
Size) BLCKSZ;
#define BufferIsLocal(buffer)
void CheckBufferIsPinnedOnce(Buffer buffer)
void FlushRelationsAllBuffers(SMgrRelation *smgrs, int nrels)
struct BufferManagerRelation BufferManagerRelation
void IncrBufferRefCount(Buffer buffer)
void DropDatabaseBuffers(Oid dbid)
PGDLLIMPORT int effective_io_concurrency
BlockNumber BufferGetBlockNumber(Buffer buffer)
PGDLLIMPORT const PgAioHandleCallbacks aio_shared_buffer_readv_cb
struct SMgrRelationData * SMgrRelation
void DropRelationBuffers(SMgrRelation smgr_reln, ForkNumber *forkNum, int nforks, BlockNumber *firstDelBlock)
Buffer ReleaseAndReadBuffer(Buffer buffer, Relation relation, BlockNumber blockNum)
PrefetchBufferResult PrefetchBuffer(Relation reln, ForkNumber forkNum, BlockNumber blockNum)
bool BufferIsLockedByMeInMode(Buffer buffer, int mode)
int GetAccessStrategyPinLimit(BufferAccessStrategy strategy)
bool StartReadBuffers(ReadBuffersOperation *operation, Buffer *buffers, BlockNumber blockNum, int *nblocks, int flags)
void EvictAllUnpinnedBuffers(int32 *buffers_evicted, int32 *buffers_flushed, int32 *buffers_skipped)
PGDLLIMPORT int bgwriter_flush_after
PGDLLIMPORT const PgAioHandleCallbacks aio_local_buffer_readv_cb
void EvictRelUnpinnedBuffers(Relation rel, int32 *buffers_evicted, int32 *buffers_flushed, int32 *buffers_skipped)
PGDLLIMPORT bool zero_damaged_pages
PGDLLIMPORT Block * LocalBufferBlockPointers
bool IsBufferCleanupOK(Buffer buffer)
PGDLLIMPORT int bgwriter_lru_maxpages
Buffer ExtendBufferedRel(BufferManagerRelation bmr, ForkNumber forkNum, BufferAccessStrategy strategy, uint32 flags)
uint32 GetAdditionalLocalPinLimit(void)
static Page BufferGetPage(Buffer buffer)
void AtEOXact_Buffers(bool isCommit)
BufferAccessStrategy GetAccessStrategy(BufferAccessStrategyType btype)
BlockNumber ExtendBufferedRelBy(BufferManagerRelation bmr, ForkNumber fork, BufferAccessStrategy strategy, uint32 flags, uint32 extend_by, Buffer *buffers, uint32 *extended_by)
struct PrefetchBufferResult PrefetchBufferResult
Size BufferManagerShmemSize(void)
static Block BufferGetBlock(Buffer buffer)
void CreateAndCopyRelationData(RelFileLocator src_rlocator, RelFileLocator dst_rlocator, bool permanent)
PGDLLIMPORT int maintenance_io_concurrency
void DropRelationsAllBuffers(SMgrRelation *smgr_reln, int nlocators)
Buffer ExtendBufferedRelTo(BufferManagerRelation bmr, ForkNumber fork, BufferAccessStrategy strategy, uint32 flags, BlockNumber extend_to, ReadBufferMode mode)
void AtProcExit_LocalBuffers(void)
PGDLLIMPORT bool track_io_timing
void BufferGetTag(Buffer buffer, RelFileLocator *rlocator, ForkNumber *forknum, BlockNumber *blknum)
void LimitAdditionalLocalPins(uint32 *additional_pins)
uint32 GetLocalPinLimit(void)
BufferAccessStrategy GetAccessStrategyWithSize(BufferAccessStrategyType btype, int ring_size_kb)
char * DebugPrintBufferRefcount(Buffer buffer)
void CheckPointBuffers(int flags)
bool BufferIsDirty(Buffer buffer)
bool BgBufferSync(WritebackContext *wb_context)
bool BufferIsPermanent(Buffer buffer)
PGDLLIMPORT int io_combine_limit_guc
int GetAccessStrategyBufferCount(BufferAccessStrategy strategy)
PrefetchBufferResult PrefetchSharedBuffer(SMgrRelation smgr_reln, ForkNumber forkNum, BlockNumber blockNum)
static Size BufferGetPageSize(Buffer buffer)
bool ConditionalLockBuffer(Buffer buffer)
BlockNumber RelationGetNumberOfBlocksInFork(Relation relation, ForkNumber forkNum)
void BufferManagerShmemInit(void)
void ReleaseBuffer(Buffer buffer)
void FreeAccessStrategy(BufferAccessStrategy strategy)
bool BufferIsLockedByMe(Buffer buffer)
PGDLLIMPORT int32 * LocalRefCount
XLogRecPtr BufferGetLSNAtomic(Buffer buffer)
bool HoldingBufferPinThatDelaysRecovery(void)
void UnlockReleaseBuffer(Buffer buffer)
void WaitReadBuffers(ReadBuffersOperation *operation)
void MarkBufferDirty(Buffer buffer)
PGDLLIMPORT int io_combine_limit
void LimitAdditionalPins(uint32 *additional_pins)
PGDLLIMPORT int NLocBuffer
void LockBufferForCleanup(Buffer buffer)
void LockBuffer(Buffer buffer, int mode)
void MarkBufferDirtyHint(Buffer buffer, bool buffer_std)
void FlushRelationBuffers(Relation rel)
@ EB_CREATE_FORK_IF_NEEDED
bool EvictUnpinnedBuffer(Buffer buf, bool *buffer_flushed)
Buffer ReadBufferWithoutRelcache(RelFileLocator rlocator, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy, bool permanent)
PGDLLIMPORT int backend_flush_after
PGDLLIMPORT double bgwriter_lru_multiplier
bool ReadRecentBuffer(RelFileLocator rlocator, ForkNumber forkNum, BlockNumber blockNum, Buffer recent_buffer)
void FlushDatabaseBuffers(Oid dbid)
PGDLLIMPORT int checkpoint_flush_after
bool StartReadBuffer(ReadBuffersOperation *operation, Buffer *buffer, BlockNumber blocknum, int flags)
Buffer ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy)
void InitBufferManagerAccess(void)
PGDLLIMPORT char * BufferBlocks
uint32 GetAdditionalPinLimit(void)
PGDLLIMPORT int io_max_combine_limit
Buffer ReadBuffer(Relation reln, BlockNumber blockNum)
@ RBM_ZERO_AND_CLEANUP_LOCK
bool ConditionalLockBufferForCleanup(Buffer buffer)
void FlushOneBuffer(Buffer buffer)
static bool BufferIsValid(Buffer bufnum)
Assert(PointerIsAligned(start, uint64))
static PgChecksumMode mode
BufferAccessStrategy strategy