PostgreSQL Source Code
git master
|
#include "postgres.h"
#include "access/heapam_xlog.h"
#include "access/visibilitymap.h"
#include "access/xlog.h"
#include "miscadmin.h"
#include "port/pg_bitutils.h"
#include "storage/bufmgr.h"
#include "storage/lmgr.h"
#include "storage/smgr.h"
#include "utils/inval.h"
Go to the source code of this file.
Macros | |
#define | MAPSIZE (BLCKSZ - MAXALIGN(SizeOfPageHeaderData)) |
#define | HEAPBLOCKS_PER_BYTE (BITS_PER_BYTE / BITS_PER_HEAPBLOCK) |
#define | HEAPBLOCKS_PER_PAGE (MAPSIZE * HEAPBLOCKS_PER_BYTE) |
#define | HEAPBLK_TO_MAPBLOCK(x) ((x) / HEAPBLOCKS_PER_PAGE) |
#define | HEAPBLK_TO_MAPBYTE(x) (((x) % HEAPBLOCKS_PER_PAGE) / HEAPBLOCKS_PER_BYTE) |
#define | HEAPBLK_TO_OFFSET(x) (((x) % HEAPBLOCKS_PER_BYTE) * BITS_PER_HEAPBLOCK) |
#define | VISIBLE_MASK64 |
#define | FROZEN_MASK64 |
Functions | |
static Buffer | vm_readbuf (Relation rel, BlockNumber blkno, bool extend) |
static void | vm_extend (Relation rel, BlockNumber vm_nblocks) |
bool | visibilitymap_clear (Relation rel, BlockNumber heapBlk, Buffer buf, uint8 flags) |
void | visibilitymap_pin (Relation rel, BlockNumber heapBlk, Buffer *buf) |
bool | visibilitymap_pin_ok (BlockNumber heapBlk, Buffer buf) |
void | visibilitymap_set (Relation rel, BlockNumber heapBlk, Buffer heapBuf, XLogRecPtr recptr, Buffer vmBuf, TransactionId cutoff_xid, uint8 flags) |
uint8 | visibilitymap_get_status (Relation rel, BlockNumber heapBlk, Buffer *buf) |
void | visibilitymap_count (Relation rel, BlockNumber *all_visible, BlockNumber *all_frozen) |
BlockNumber | visibilitymap_prepare_truncate (Relation rel, BlockNumber nheapblocks) |
#define FROZEN_MASK64 |
Definition at line 123 of file visibilitymap.c.
Referenced by visibilitymap_count().
#define HEAPBLK_TO_MAPBLOCK | ( | x | ) | ((x) / HEAPBLOCKS_PER_PAGE) |
Definition at line 116 of file visibilitymap.c.
Referenced by visibilitymap_clear(), visibilitymap_get_status(), visibilitymap_pin(), visibilitymap_pin_ok(), visibilitymap_prepare_truncate(), and visibilitymap_set().
#define HEAPBLK_TO_MAPBYTE | ( | x | ) | (((x) % HEAPBLOCKS_PER_PAGE) / HEAPBLOCKS_PER_BYTE) |
Definition at line 117 of file visibilitymap.c.
Referenced by visibilitymap_clear(), visibilitymap_get_status(), visibilitymap_prepare_truncate(), and visibilitymap_set().
#define HEAPBLK_TO_OFFSET | ( | x | ) | (((x) % HEAPBLOCKS_PER_BYTE) * BITS_PER_HEAPBLOCK) |
Definition at line 118 of file visibilitymap.c.
Referenced by visibilitymap_clear(), visibilitymap_get_status(), visibilitymap_prepare_truncate(), and visibilitymap_set().
#define HEAPBLOCKS_PER_BYTE (BITS_PER_BYTE / BITS_PER_HEAPBLOCK) |
Definition at line 110 of file visibilitymap.c.
#define HEAPBLOCKS_PER_PAGE (MAPSIZE * HEAPBLOCKS_PER_BYTE) |
Definition at line 113 of file visibilitymap.c.
#define MAPSIZE (BLCKSZ - MAXALIGN(SizeOfPageHeaderData)) |
Definition at line 107 of file visibilitymap.c.
Referenced by visibilitymap_count(), and visibilitymap_prepare_truncate().
#define VISIBLE_MASK64 |
Definition at line 121 of file visibilitymap.c.
Referenced by visibilitymap_count().
bool visibilitymap_clear | ( | Relation | rel, |
BlockNumber | heapBlk, | ||
Buffer | buf, | ||
uint8 | flags | ||
) |
Definition at line 139 of file visibilitymap.c.
References Assert, BUFFER_LOCK_EXCLUSIVE, BUFFER_LOCK_UNLOCK, BufferGetBlockNumber(), BufferGetPage, BufferIsValid, DEBUG1, elog, ERROR, HEAPBLK_TO_MAPBLOCK, HEAPBLK_TO_MAPBYTE, HEAPBLK_TO_OFFSET, LockBuffer(), MarkBufferDirty(), PageGetContents, RelationGetRelationName, and VISIBILITYMAP_VALID_BITS.
Referenced by heap_delete(), heap_force_common(), heap_insert(), heap_lock_tuple(), heap_lock_updated_tuple_rec(), heap_multi_insert(), heap_update(), heap_xlog_delete(), heap_xlog_insert(), heap_xlog_lock(), heap_xlog_lock_updated(), heap_xlog_multi_insert(), heap_xlog_update(), and lazy_scan_heap().
void visibilitymap_count | ( | Relation | rel, |
BlockNumber * | all_visible, | ||
BlockNumber * | all_frozen | ||
) |
Definition at line 378 of file visibilitymap.c.
References Assert, BufferGetPage, BufferIsValid, FROZEN_MASK64, i, MAPSIZE, PageGetContents, pg_popcount64, ReleaseBuffer(), StaticAssertStmt, VISIBLE_MASK64, and vm_readbuf().
Referenced by do_analyze_rel(), heap_vacuum_rel(), and index_update_stats().
uint8 visibilitymap_get_status | ( | Relation | rel, |
BlockNumber | heapBlk, | ||
Buffer * | buf | ||
) |
Definition at line 330 of file visibilitymap.c.
References BufferGetBlockNumber(), BufferGetPage, BufferIsValid, DEBUG1, elog, HEAPBLK_TO_MAPBLOCK, HEAPBLK_TO_MAPBYTE, HEAPBLK_TO_OFFSET, InvalidBuffer, PageGetContents, RelationGetRelationName, ReleaseBuffer(), VISIBILITYMAP_VALID_BITS, and vm_readbuf().
Referenced by collect_visibility_data(), heap_insert(), lazy_scan_heap(), lazy_vacuum_page(), pg_visibility(), pg_visibility_map(), pg_visibility_map_summary(), and verify_heapam().
void visibilitymap_pin | ( | Relation | rel, |
BlockNumber | heapBlk, | ||
Buffer * | buf | ||
) |
Definition at line 190 of file visibilitymap.c.
References BufferGetBlockNumber(), BufferIsValid, HEAPBLK_TO_MAPBLOCK, ReleaseBuffer(), and vm_readbuf().
Referenced by GetVisibilityMapPins(), heap_delete(), heap_force_common(), heap_lock_tuple(), heap_lock_updated_tuple_rec(), heap_update(), heap_xlog_delete(), heap_xlog_insert(), heap_xlog_lock(), heap_xlog_lock_updated(), heap_xlog_multi_insert(), heap_xlog_update(), heap_xlog_visible(), lazy_scan_heap(), and RelationGetBufferForTuple().
bool visibilitymap_pin_ok | ( | BlockNumber | heapBlk, |
Buffer | buf | ||
) |
Definition at line 214 of file visibilitymap.c.
References BufferGetBlockNumber(), BufferIsValid, and HEAPBLK_TO_MAPBLOCK.
Referenced by GetVisibilityMapPins(), heap_insert(), and heap_multi_insert().
BlockNumber visibilitymap_prepare_truncate | ( | Relation | rel, |
BlockNumber | nheapblocks | ||
) |
Definition at line 445 of file visibilitymap.c.
References BUFFER_LOCK_EXCLUSIVE, BufferGetPage, BufferIsValid, DEBUG1, elog, END_CRIT_SECTION, HEAPBLK_TO_MAPBLOCK, HEAPBLK_TO_MAPBYTE, HEAPBLK_TO_OFFSET, InRecovery, InvalidBlockNumber, LockBuffer(), log_newpage_buffer(), MAPSIZE, MarkBufferDirty(), MemSet, PageGetContents, RelationData::rd_smgr, RelationGetRelationName, RelationNeedsWAL, RelationOpenSmgr, smgrexists(), smgrnblocks(), START_CRIT_SECTION, UnlockReleaseBuffer(), VISIBILITYMAP_FORKNUM, vm_readbuf(), and XLogHintBitIsNeeded.
Referenced by pg_truncate_visibility_map(), RelationTruncate(), and smgr_redo().
void visibilitymap_set | ( | Relation | rel, |
BlockNumber | heapBlk, | ||
Buffer | heapBuf, | ||
XLogRecPtr | recptr, | ||
Buffer | vmBuf, | ||
TransactionId | cutoff_xid, | ||
uint8 | flags | ||
) |
Definition at line 243 of file visibilitymap.c.
References Assert, BUFFER_LOCK_EXCLUSIVE, BUFFER_LOCK_UNLOCK, BufferGetBlockNumber(), BufferGetPage, BufferIsValid, DEBUG1, elog, END_CRIT_SECTION, ERROR, HEAPBLK_TO_MAPBLOCK, HEAPBLK_TO_MAPBYTE, HEAPBLK_TO_OFFSET, InRecovery, LockBuffer(), log_heap_visible(), MarkBufferDirty(), PageGetContents, PageIsAllVisible, PageSetLSN, RelationData::rd_node, RelationGetRelationName, RelationNeedsWAL, START_CRIT_SECTION, VISIBILITYMAP_VALID_BITS, XLogHintBitIsNeeded, and XLogRecPtrIsInvalid.
Referenced by heap_insert(), heap_multi_insert(), heap_xlog_visible(), lazy_scan_heap(), and lazy_vacuum_page().
|
static |
Definition at line 617 of file visibilitymap.c.
References CacheInvalidateSmgr(), PGAlignedBlock::data, ExclusiveLock, InvalidBlockNumber, LockRelationForExtension(), PageInit(), PageSetChecksumInplace(), RelationData::rd_smgr, RelationOpenSmgr, SMgrRelationData::smgr_cached_nblocks, SMgrRelationData::smgr_rnode, smgrcreate(), smgrexists(), smgrextend(), smgrnblocks(), UnlockRelationForExtension(), and VISIBILITYMAP_FORKNUM.
Referenced by vm_readbuf().
|
static |
Definition at line 547 of file visibilitymap.c.
References buf, BUFFER_LOCK_EXCLUSIVE, BUFFER_LOCK_UNLOCK, BufferGetPage, InvalidBlockNumber, InvalidBuffer, LockBuffer(), PageInit(), PageIsNew, RBM_ZERO_ON_ERROR, RelationData::rd_smgr, ReadBufferExtended(), RelationOpenSmgr, SMgrRelationData::smgr_cached_nblocks, smgrexists(), smgrnblocks(), VISIBILITYMAP_FORKNUM, and vm_extend().
Referenced by visibilitymap_count(), visibilitymap_get_status(), visibilitymap_pin(), and visibilitymap_prepare_truncate().