|
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 "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 190 of file pruneheap.c.
| void heap_get_root_tuples | ( | Page | page, |
| OffsetNumber * | root_offsets | ||
| ) |
Definition at line 2289 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 2416 of file pruneheap.c.
Referenced by heap_log_freeze_plan().
|
inlinestatic |
Definition at line 2400 of file pruneheap.c.
Referenced by heap_log_freeze_plan().
|
inlinestatic |
|
static |
Definition at line 2482 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 852 of file pruneheap.c.
References Assert, BUFFER_LOCK_EXCLUSIVE, BufferIsLockedByMeInMode(), ereport, errcode(), ERRCODE_DATA_CORRUPTED, errcontext, errmsg, fb(), 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 1090 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 2065 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 271 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, 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 734 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 950 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 1483 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 1740 of file pruneheap.c.
References Assert, fb(), and MaxHeapTuplesPerPage.
Referenced by heap_prune_record_dead_or_unused().
|
static |
Definition at line 1775 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 1686 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 1709 of file pruneheap.c.
References Assert, fb(), and MaxHeapTuplesPerPage.
Referenced by heap_prune_chain().
|
static |
Definition at line 2005 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 1834 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 2040 of file pruneheap.c.
Referenced by heap_prune_chain().
|
static |
Definition at line 1823 of file pruneheap.c.
Referenced by prune_freeze_plan().
|
static |
Definition at line 1801 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 1401 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 1444 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 2561 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 2241 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 1007 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 531 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 400 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().