|
PostgreSQL Source Code git master
|
#include "postgres.h"#include "access/heapam.h"#include "access/heapam_xlog.h"#include "access/htup_details.h"#include "access/multixact.h"#include "access/transam.h"#include "access/visibilitymap.h"#include "access/xlog.h"#include "access/xloginsert.h"#include "commands/vacuum.h"#include "executor/instrument.h"#include "miscadmin.h"#include "pgstat.h"#include "storage/bufmgr.h"#include "storage/freespace.h"#include "utils/rel.h"#include "utils/snapmgr.h"
Go to the source code of this file.
Data Structures | |
| struct | PruneState |
Typedefs | |
| typedef enum VMCorruptionType | VMCorruptionType |
Enumerations | |
| enum | VMCorruptionType { VM_CORRUPT_MISSING_PAGE_HINT , VM_CORRUPT_LPDEAD , VM_CORRUPT_TUPLE_VISIBILITY } |
| Enumerator | |
|---|---|
| VM_CORRUPT_MISSING_PAGE_HINT | |
| VM_CORRUPT_LPDEAD | |
| VM_CORRUPT_TUPLE_VISIBILITY | |
Definition at line 191 of file pruneheap.c.
| void heap_get_root_tuples | ( | Page | page, |
| OffsetNumber * | root_offsets | ||
| ) |
Definition at line 2311 of file pruneheap.c.
References Assert, fb(), FirstOffsetNumber, HeapTupleHeaderGetUpdateXid(), HeapTupleHeaderGetXmin(), HeapTupleHeaderIndicatesMovedPartitions(), HeapTupleHeaderIsHeapOnly(), HeapTupleHeaderIsHotUpdated(), InvalidOffsetNumber, InvalidTransactionId, ItemIdGetRedirect, ItemIdIsDead, ItemIdIsNormal, ItemIdIsRedirected, ItemIdIsUsed, ItemPointerGetOffsetNumber(), MaxHeapTuplesPerPage, MemSet, OffsetNumberNext, PageGetItem(), PageGetItemId(), PageGetMaxOffsetNumber(), HeapTupleHeaderData::t_ctid, TransactionIdEquals, and TransactionIdIsValid.
Referenced by heapam_index_build_range_scan(), and heapam_index_validate_scan().
Definition at line 2438 of file pruneheap.c.
Referenced by heap_log_freeze_plan().
|
inlinestatic |
Definition at line 2422 of file pruneheap.c.
Referenced by heap_log_freeze_plan().
|
inlinestatic |
|
static |
Definition at line 2504 of file pruneheap.c.
References Assert, fb(), heap_log_freeze_cmp(), heap_log_freeze_eq(), heap_log_freeze_new_plan(), i, and qsort.
Referenced by log_heap_prune_and_freeze().
|
static |
Definition at line 872 of file pruneheap.c.
References Assert, BUFFER_LOCK_EXCLUSIVE, BUFFER_LOCK_UNLOCK, BufferIsLockedByMeInMode(), ereport, errcode(), ERRCODE_DATA_CORRUPTED, errcontext, errmsg, fb(), LockBuffer(), MarkBufferDirtyHint(), PageClearAllVisible(), PageIsAllVisible(), RelationGetRelationName, relname, visibilitymap_clear(), VISIBILITYMAP_VALID_BITS, VM_CORRUPT_LPDEAD, VM_CORRUPT_MISSING_PAGE_HINT, VM_CORRUPT_TUPLE_VISIBILITY, and WARNING.
Referenced by heap_page_prune_and_freeze(), heap_prune_record_dead_or_unused(), heap_prune_record_prunable(), and heap_prune_record_unchanged_lp_dead().
| void heap_page_prune_and_freeze | ( | PruneFreezeParams * | params, |
| PruneFreezeResult * | presult, | ||
| OffsetNumber * | off_loc, | ||
| TransactionId * | new_relfrozen_xid, | ||
| MultiXactId * | new_relmin_mxid | ||
| ) |
Definition at line 1112 of file pruneheap.c.
References Assert, BUFFER_LOCK_EXCLUSIVE, BUFFER_LOCK_UNLOCK, END_CRIT_SECTION, fb(), GlobalVisTestXidConsideredRunning(), heap_freeze_prepared_tuples(), heap_page_fix_vm_corruption(), HEAP_PAGE_PRUNE_ALLOW_FAST_PATH, heap_page_prune_execute(), heap_page_will_freeze(), heap_page_will_set_vm(), InvalidBuffer, InvalidOffsetNumber, InvalidTransactionId, LockBuffer(), log_heap_prune_and_freeze(), MarkBufferDirty(), MarkBufferDirtyHint(), PruneFreezeParams::options, PageClearFull(), PageClearPrunable, PageGetPruneXid(), PageIsAllVisible(), PageIsFull(), PageSetAllVisible(), pgWalUsage, prune_freeze_fast_path(), prune_freeze_plan(), prune_freeze_setup(), PruneFreezeParams::reason, RelationNeedsWAL, START_CRIT_SECTION, TransactionIdFollows(), TransactionIdIsNormal, TransactionIdIsValid, VISIBILITYMAP_ALL_FROZEN, VISIBILITYMAP_ALL_VISIBLE, visibilitymap_set(), VISIBILITYMAP_VALID_BITS, VM_CORRUPT_MISSING_PAGE_HINT, and WalUsage::wal_fpi.
Referenced by heap_page_prune_opt(), and lazy_scan_prune().
| void heap_page_prune_execute | ( | Buffer | buffer, |
| bool | lp_truncate_only, | ||
| OffsetNumber * | redirected, | ||
| int | nredirected, | ||
| OffsetNumber * | nowdead, | ||
| int | ndead, | ||
| OffsetNumber * | nowunused, | ||
| int | nunused | ||
| ) |
Definition at line 2087 of file pruneheap.c.
References Assert, BufferGetPage(), fb(), HeapTupleHeaderIsHeapOnly(), i, ItemIdGetRedirect, ItemIdHasStorage, ItemIdIsDead, ItemIdIsNormal, ItemIdIsRedirected, ItemIdIsUsed, ItemIdSetDead, ItemIdSetRedirect, ItemIdSetUnused, page_verify_redirects(), PageGetItem(), PageGetItemId(), PageRepairFragmentation(), PageTruncateLinePointerArray(), and PG_USED_FOR_ASSERTS_ONLY.
Referenced by heap_page_prune_and_freeze(), and heap_xlog_prune_freeze().
| void heap_page_prune_opt | ( | Relation | relation, |
| Buffer | buffer, | ||
| Buffer * | vmbuffer, | ||
| bool | rel_read_only | ||
| ) |
Definition at line 272 of file pruneheap.c.
References PruneFreezeParams::buffer, BUFFER_LOCK_UNLOCK, BufferGetBlockNumber(), BufferGetPage(), ConditionalLockBufferForCleanup(), PruneFreezeParams::cutoffs, fb(), GlobalVisTestFor(), GlobalVisTestIsRemovableXid(), HEAP_DEFAULT_FILLFACTOR, HEAP_PAGE_PRUNE_ALLOW_FAST_PATH, heap_page_prune_and_freeze(), HEAP_PAGE_PRUNE_SET_VM, LockBuffer(), Max, PruneFreezeParams::options, PageGetHeapFreeSpace(), PageGetPruneXid(), PageIsFull(), pgstat_update_heap_dead_tuples(), PRUNE_ON_ACCESS, PruneFreezeParams::reason, RecordPageWithFreeSpace(), RecoveryInProgress(), PruneFreezeParams::relation, RelationGetTargetPageFreeSpace, TransactionIdIsValid, visibilitymap_pin(), PruneFreezeParams::vistest, and PruneFreezeParams::vmbuffer.
Referenced by BitmapHeapScanNextBlock(), heap_prepare_pagescan(), and heapam_index_fetch_tuple().
|
static |
Definition at line 754 of file pruneheap.c.
References Assert, fb(), heap_pre_freeze_checks(), RelationNeedsWAL, TransactionIdPrecedes(), XLogCheckBufferNeedsBackup(), and XLogHintBitIsNeeded.
Referenced by heap_page_prune_and_freeze().
|
static |
Definition at line 972 of file pruneheap.c.
References BufferIsDirty(), fb(), PRUNE_ON_ACCESS, VISIBILITYMAP_ALL_FROZEN, VISIBILITYMAP_ALL_VISIBLE, and XLogCheckBufferNeedsBackup().
Referenced by heap_page_prune_and_freeze().
|
static |
Definition at line 1505 of file pruneheap.c.
References Assert, elog, ERROR, fb(), FirstOffsetNumber, heap_prune_record_dead_or_unused(), heap_prune_record_redirect(), heap_prune_record_unchanged_lp_normal(), heap_prune_record_unchanged_lp_redirect(), heap_prune_record_unused(), HEAPTUPLE_DEAD, HEAPTUPLE_DELETE_IN_PROGRESS, HEAPTUPLE_INSERT_IN_PROGRESS, HEAPTUPLE_LIVE, HEAPTUPLE_RECENTLY_DEAD, HeapTupleHeaderAdvanceConflictHorizon(), HeapTupleHeaderGetUpdateXid(), HeapTupleHeaderGetXmin(), HeapTupleHeaderIndicatesMovedPartitions(), HeapTupleHeaderIsHotUpdated(), htsv_get_valid_status(), i, InvalidTransactionId, ItemIdGetRedirect, ItemIdIsDead, ItemIdIsNormal, ItemIdIsRedirected, ItemIdIsUsed, ItemPointerGetBlockNumber(), ItemPointerGetOffsetNumber(), MaxHeapTuplesPerPage, PageGetItem(), PageGetItemId(), HeapTupleHeaderData::t_ctid, TransactionIdEquals, and TransactionIdIsValid.
Referenced by prune_freeze_plan().
|
static |
Definition at line 1762 of file pruneheap.c.
References Assert, fb(), and MaxHeapTuplesPerPage.
Referenced by heap_prune_record_dead_or_unused().
|
static |
Definition at line 1797 of file pruneheap.c.
References fb(), heap_page_fix_vm_corruption(), heap_prune_record_dead(), heap_prune_record_unused(), PageIsAllVisible(), unlikely, and VM_CORRUPT_LPDEAD.
Referenced by heap_prune_chain().
|
static |
Definition at line 1708 of file pruneheap.c.
References Assert, fb(), heap_page_fix_vm_corruption(), PageIsAllVisible(), TransactionIdIsNormal, TransactionIdIsValid, TransactionIdPrecedes(), and VM_CORRUPT_TUPLE_VISIBILITY.
Referenced by heap_prune_record_unchanged_lp_normal().
|
static |
Definition at line 1731 of file pruneheap.c.
References Assert, fb(), and MaxHeapTuplesPerPage.
Referenced by heap_prune_chain().
|
static |
Definition at line 2027 of file pruneheap.c.
References Assert, fb(), heap_page_fix_vm_corruption(), PageIsAllVisible(), and VM_CORRUPT_LPDEAD.
Referenced by prune_freeze_plan().
|
static |
Definition at line 1856 of file pruneheap.c.
References Assert, elog, ERROR, fb(), heap_prepare_freeze_tuple(), heap_prune_record_prunable(), HEAPTUPLE_DELETE_IN_PROGRESS, HEAPTUPLE_INSERT_IN_PROGRESS, HEAPTUPLE_LIVE, HEAPTUPLE_RECENTLY_DEAD, HeapTupleHeaderGetUpdateXid(), HeapTupleHeaderGetXmin(), HeapTupleHeaderXminCommitted(), PageGetItem(), PageGetItemId(), TransactionIdFollows(), and TransactionIdIsNormal.
Referenced by heap_prune_chain(), and prune_freeze_plan().
|
static |
Definition at line 2062 of file pruneheap.c.
Referenced by heap_prune_chain().
|
static |
Definition at line 1845 of file pruneheap.c.
Referenced by prune_freeze_plan().
|
static |
Definition at line 1823 of file pruneheap.c.
References Assert, fb(), and MaxHeapTuplesPerPage.
Referenced by heap_prune_chain(), heap_prune_record_dead_or_unused(), and prune_freeze_plan().
|
static |
Definition at line 1423 of file pruneheap.c.
References fb(), GlobalVisTestIsRemovableXid(), HEAPTUPLE_DEAD, HEAPTUPLE_RECENTLY_DEAD, HeapTupleSatisfiesVacuumHorizon(), NormalTransactionIdPrecedes, and TransactionIdIsValid.
Referenced by prune_freeze_plan().
|
inlinestatic |
Definition at line 1466 of file pruneheap.c.
References Assert, HEAPTUPLE_DEAD, and HEAPTUPLE_DELETE_IN_PROGRESS.
Referenced by heap_prune_chain().
| void log_heap_prune_and_freeze | ( | Relation | relation, |
| Buffer | buffer, | ||
| Buffer | vmbuffer, | ||
| uint8 | vmflags, | ||
| TransactionId | conflict_xid, | ||
| bool | cleanup_lock, | ||
| PruneReason | reason, | ||
| HeapTupleFreeze * | frozen, | ||
| int | nfrozen, | ||
| OffsetNumber * | redirected, | ||
| int | nredirected, | ||
| OffsetNumber * | dead, | ||
| int | ndead, | ||
| OffsetNumber * | unused, | ||
| int | nunused | ||
| ) |
Definition at line 2583 of file pruneheap.c.
References Assert, BufferGetPage(), BufferIsDirty(), data, elog, ERROR, fb(), heap_log_freeze_plan(), MaxHeapTuplesPerPage, xlhp_prune_items::ntargets, PageGetLSN(), PageSetLSN(), PRUNE_ON_ACCESS, PRUNE_VACUUM_CLEANUP, PRUNE_VACUUM_SCAN, REGBUF_FORCE_IMAGE, REGBUF_NO_IMAGE, REGBUF_STANDARD, RelationIsAccessibleInLogicalDecoding, SizeOfHeapPrune, TransactionIdIsValid, VISIBILITYMAP_ALL_FROZEN, VISIBILITYMAP_ALL_VISIBLE, VISIBILITYMAP_VALID_BITS, XLHP_CLEANUP_LOCK, XLHP_HAS_CONFLICT_HORIZON, XLHP_HAS_DEAD_ITEMS, XLHP_HAS_FREEZE_PLANS, XLHP_HAS_NOW_UNUSED_ITEMS, XLHP_HAS_REDIRECTIONS, XLHP_IS_CATALOG_REL, XLHP_VM_ALL_FROZEN, XLHP_VM_ALL_VISIBLE, XLOG_HEAP2_PRUNE_ON_ACCESS, XLOG_HEAP2_PRUNE_VACUUM_CLEANUP, XLOG_HEAP2_PRUNE_VACUUM_SCAN, XLogBeginInsert(), XLogHintBitIsNeeded, XLogInsert(), XLogRecPtrIsValid, XLogRegisterBufData(), XLogRegisterBuffer(), and XLogRegisterData().
Referenced by heap_page_prune_and_freeze(), lazy_scan_new_or_empty(), and lazy_vacuum_heap_page().
Definition at line 2263 of file pruneheap.c.
References Assert, fb(), FirstOffsetNumber, HeapTupleHeaderIsHeapOnly(), ItemIdGetRedirect, ItemIdHasStorage, ItemIdIsNormal, ItemIdIsRedirected, ItemIdIsUsed, OffsetNumberNext, PageGetItem(), PageGetItemId(), and PageGetMaxOffsetNumber().
Referenced by heap_page_prune_execute().
|
static |
Definition at line 1029 of file pruneheap.c.
References Assert, fb(), FirstOffsetNumber, ItemIdIsNormal, ItemIdIsUsed, MarkBufferDirtyHint(), OffsetNumberNext, PageClearPrunable, PageGetItemId(), PageGetMaxOffsetNumber(), PageGetPruneXid(), PageIsEmpty(), TransactionIdIsValid, VISIBILITYMAP_ALL_FROZEN, and VISIBILITYMAP_ALL_VISIBLE.
Referenced by heap_page_prune_and_freeze().
|
static |
Definition at line 551 of file pruneheap.c.
References Assert, elog, ERROR, fb(), FirstOffsetNumber, heap_prune_chain(), heap_prune_record_unchanged_lp_dead(), heap_prune_record_unchanged_lp_normal(), heap_prune_record_unchanged_lp_unused(), heap_prune_record_unused(), heap_prune_satisfies_vacuum(), HEAPTUPLE_DEAD, HeapTupleHeaderAdvanceConflictHorizon(), HeapTupleHeaderIsHeapOnly(), HeapTupleHeaderIsHotUpdated(), i, InvalidOffsetNumber, ItemIdGetLength, ItemIdIsDead, ItemIdIsNormal, ItemIdIsRedirected, ItemIdIsUsed, ItemPointerSet(), likely, OffsetNumberNext, OffsetNumberPrev, PageGetItem(), PageGetItemId(), PageGetMaxOffsetNumber(), RelationGetRelid, HeapTupleData::t_tableOid, and unlikely.
Referenced by heap_page_prune_and_freeze().
|
static |
Definition at line 420 of file pruneheap.c.
References Assert, PruneFreezeParams::buffer, BufferGetBlockNumber(), BufferGetPage(), BufferIsValid(), PruneFreezeParams::cutoffs, fb(), HEAP_PAGE_PRUNE_FREEZE, HEAP_PAGE_PRUNE_MARK_UNUSED_NOW, HEAP_PAGE_PRUNE_SET_VM, InvalidMultiXactId, InvalidTransactionId, PruneFreezeParams::options, PruneFreezeParams::relation, visibilitymap_get_status(), PruneFreezeParams::vistest, and PruneFreezeParams::vmbuffer.
Referenced by heap_page_prune_and_freeze().