PostgreSQL Source Code
git master
|
#include "postgres.h"
#include "access/multixact.h"
#include "access/slru.h"
#include "access/transam.h"
#include "access/twophase.h"
#include "access/twophase_rmgr.h"
#include "access/xact.h"
#include "access/xloginsert.h"
#include "access/xlogutils.h"
#include "catalog/pg_type.h"
#include "commands/dbcommands.h"
#include "funcapi.h"
#include "lib/ilist.h"
#include "miscadmin.h"
#include "pg_trace.h"
#include "postmaster/autovacuum.h"
#include "storage/lmgr.h"
#include "storage/pmsignal.h"
#include "storage/proc.h"
#include "storage/procarray.h"
#include "utils/builtins.h"
#include "utils/memutils.h"
#include "utils/snapmgr.h"
Go to the source code of this file.
Data Structures | |
struct | MultiXactStateData |
struct | mXactCacheEnt |
struct | mxtruncinfo |
Typedefs | |
typedef struct MultiXactStateData | MultiXactStateData |
typedef struct mXactCacheEnt | mXactCacheEnt |
typedef struct mxtruncinfo | mxtruncinfo |
Variables | |
static SlruCtlData | MultiXactOffsetCtlData |
static SlruCtlData | MultiXactMemberCtlData |
static MultiXactStateData * | MultiXactState |
static MultiXactId * | OldestMemberMXactId |
static MultiXactId * | OldestVisibleMXactId |
static dclist_head | MXactCache = DCLIST_STATIC_INIT(MXactCache) |
static MemoryContext | MXactContext = NULL |
Definition at line 334 of file multixact.c.
Definition at line 335 of file multixact.c.
Definition at line 336 of file multixact.c.
#define MAX_CACHE_ENTRIES 256 |
Definition at line 323 of file multixact.c.
#define MAX_MEMBERS_IN_LAST_MEMBERS_PAGE ((uint32) ((0xFFFFFFFF % MULTIXACT_MEMBERS_PER_PAGE) + 1)) |
Definition at line 155 of file multixact.c.
#define MaxOldestSlot (MaxBackends + max_prepared_xacts) |
Definition at line 290 of file multixact.c.
#define MULTIXACT_FLAGBYTES_PER_GROUP 4 |
Definition at line 135 of file multixact.c.
#define MULTIXACT_MEMBER_DANGER_THRESHOLD (MaxMultiXactOffset - MaxMultiXactOffset / 4) |
Definition at line 178 of file multixact.c.
#define MULTIXACT_MEMBER_SAFE_THRESHOLD (MaxMultiXactOffset / 2) |
Definition at line 177 of file multixact.c.
#define MULTIXACT_MEMBERGROUP_SIZE (sizeof(TransactionId) * MULTIXACT_MEMBERS_PER_MEMBERGROUP + MULTIXACT_FLAGBYTES_PER_GROUP) |
Definition at line 139 of file multixact.c.
#define MULTIXACT_MEMBERGROUPS_PER_PAGE (BLCKSZ / MULTIXACT_MEMBERGROUP_SIZE) |
Definition at line 141 of file multixact.c.
#define MULTIXACT_MEMBERS_PER_MEMBERGROUP (MULTIXACT_FLAGBYTES_PER_GROUP * MXACT_MEMBER_FLAGS_PER_BYTE) |
Definition at line 136 of file multixact.c.
#define MULTIXACT_MEMBERS_PER_PAGE (MULTIXACT_MEMBERGROUPS_PER_PAGE * MULTIXACT_MEMBERS_PER_MEMBERGROUP) |
Definition at line 142 of file multixact.c.
#define MULTIXACT_OFFSETS_PER_PAGE (BLCKSZ / sizeof(MultiXactOffset)) |
Definition at line 109 of file multixact.c.
#define MultiXactIdToOffsetEntry | ( | xid | ) | ((xid) % (MultiXactOffset) MULTIXACT_OFFSETS_PER_PAGE) |
Definition at line 113 of file multixact.c.
#define MultiXactIdToOffsetPage | ( | xid | ) | ((xid) / (MultiXactOffset) MULTIXACT_OFFSETS_PER_PAGE) |
Definition at line 111 of file multixact.c.
#define MultiXactIdToOffsetSegment | ( | xid | ) | (MultiXactIdToOffsetPage(xid) / SLRU_PAGES_PER_SEGMENT) |
Definition at line 115 of file multixact.c.
#define MultiXactMemberCtl (&MultiXactMemberCtlData) |
Definition at line 191 of file multixact.c.
#define MultiXactOffsetCtl (&MultiXactOffsetCtlData) |
Definition at line 190 of file multixact.c.
#define MXACT_MEMBER_BITS_PER_XACT 8 |
Definition at line 130 of file multixact.c.
#define MXACT_MEMBER_FLAGS_PER_BYTE 1 |
Definition at line 131 of file multixact.c.
#define MXACT_MEMBER_XACT_BITMASK ((1 << MXACT_MEMBER_BITS_PER_XACT) - 1) |
Definition at line 132 of file multixact.c.
#define MXOffsetToFlagsBitShift | ( | xid | ) |
Definition at line 167 of file multixact.c.
#define MXOffsetToFlagsOffset | ( | xid | ) |
Definition at line 163 of file multixact.c.
#define MXOffsetToMemberOffset | ( | xid | ) |
Definition at line 172 of file multixact.c.
#define MXOffsetToMemberPage | ( | xid | ) | ((xid) / (TransactionId) MULTIXACT_MEMBERS_PER_PAGE) |
Definition at line 159 of file multixact.c.
#define MXOffsetToMemberSegment | ( | xid | ) | (MXOffsetToMemberPage(xid) / SLRU_PAGES_PER_SEGMENT) |
Definition at line 160 of file multixact.c.
#define OFFSET_WARN_SEGMENTS 20 |
#define PreviousMultiXactId | ( | xid | ) | ((xid) == FirstMultiXactId ? MaxMultiXactId : (xid) - 1) |
Definition at line 181 of file multixact.c.
#define SHARED_MULTIXACT_STATE_SIZE |
typedef struct MultiXactStateData MultiXactStateData |
typedef struct mXactCacheEnt mXactCacheEnt |
typedef struct mxtruncinfo mxtruncinfo |
void AtEOXact_MultiXact | ( | void | ) |
Definition at line 1688 of file multixact.c.
References dclist_init(), InvalidMultiXactId, MXactCache, MXactContext, MyBackendId, OldestMemberMXactId, and OldestVisibleMXactId.
Referenced by AbortTransaction(), and CommitTransaction().
void AtPrepare_MultiXact | ( | void | ) |
Definition at line 1716 of file multixact.c.
References MultiXactIdIsValid, MyBackendId, OldestMemberMXactId, RegisterTwoPhaseRecord(), and TWOPHASE_RM_MULTIXACT_ID.
Referenced by PrepareTransaction().
void BootStrapMultiXact | ( | void | ) |
Definition at line 1894 of file multixact.c.
References Assert(), LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), MultiXactMemberCtl, MultiXactOffsetCtl, SimpleLruWritePage(), ZeroMultiXactMemberPage(), and ZeroMultiXactOffsetPage().
Referenced by BootStrapXLOG().
void CheckPointMultiXact | ( | void | ) |
Definition at line 2155 of file multixact.c.
References MultiXactMemberCtl, MultiXactOffsetCtl, and SimpleLruWriteAll().
Referenced by CheckPointGuts().
|
static |
Definition at line 2434 of file multixact.c.
References difference(), LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), MAX_MEMBERS_IN_LAST_MEMBERS_PAGE, MaxMultiXactOffset, MULTIXACT_MEMBERS_PER_PAGE, MXOffsetToFlagsBitShift, MXOffsetToFlagsOffset, MXOffsetToMemberPage, and ZeroMultiXactMemberPage().
Referenced by GetNewMultiXactId().
|
static |
Definition at line 2404 of file multixact.c.
References FirstMultiXactId, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), MultiXactIdToOffsetEntry, MultiXactIdToOffsetPage, and ZeroMultiXactOffsetPage().
Referenced by GetNewMultiXactId().
|
static |
Definition at line 2735 of file multixact.c.
References Assert(), MultiXactStateData::finishedStartup, LWLockRelease(), MultiXactIdToOffsetEntry, MultiXactIdToOffsetPage, MultiXactMemberCtl, MultiXactOffsetCtl, MultiXactState, SimpleLruDoesPhysicalPageExist(), SimpleLruReadPage_ReadOnly(), and SimpleLruWriteAll().
Referenced by SetOffsetVacuumLimit(), and TruncateMultiXact().
int GetMultiXactIdMembers | ( | MultiXactId | multi, |
MultiXactMember ** | members, | ||
bool | from_pgupgrade, | ||
bool | isLockOnly | ||
) |
Definition at line 1225 of file multixact.c.
References Assert(), CHECK_FOR_INTERRUPTS, DEBUG2, debug_elog2, debug_elog3, ereport, errcode(), errmsg(), ERROR, FirstMultiXactId, i, if(), LW_EXCLUSIVE, LW_SHARED, LWLockAcquire(), LWLockRelease(), MultiXactIdIsValid, MultiXactIdPrecedes(), MultiXactIdSetOldestVisible(), MultiXactIdToOffsetEntry, MultiXactIdToOffsetPage, MultiXactMemberCtl, MultiXactOffsetCtl, MultiXactState, MXACT_MEMBER_XACT_BITMASK, mXactCacheGetById(), mXactCachePut(), mxid_to_string(), MXOffsetToFlagsBitShift, MXOffsetToFlagsOffset, MXOffsetToMemberOffset, MXOffsetToMemberPage, MyBackendId, MultiXactStateData::nextMXact, MultiXactStateData::nextOffset, MultiXactStateData::oldestMultiXactId, OldestVisibleMXactId, palloc(), pg_usleep(), SimpleLruReadPage(), MultiXactMember::status, TransactionIdIsValid, and MultiXactMember::xid.
Referenced by Do_MultiXactIdWait(), DoesMultiXactIdConflict(), FreezeMultiXactId(), GetMultiXactIdHintBits(), heap_lock_tuple(), heap_lock_updated_tuple_rec(), heap_tuple_should_freeze(), MultiXactIdExpand(), MultiXactIdGetUpdateXid(), MultiXactIdIsRunning(), pg_get_multixact_members(), and pgrowlocks().
|
static |
Definition at line 958 of file multixact.c.
References DEBUG2, debug_elog3, debug_elog4, elog(), ereport, errcode(), errdetail_plural(), errhint(), errmsg(), errmsg_plural(), ERROR, ExtendMultiXactMember(), ExtendMultiXactOffset(), FirstMultiXactId, get_database_name(), IsUnderPostmaster, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), MultiXactStateData::multiStopLimit, MultiXactStateData::multiVacLimit, MultiXactStateData::multiWarnLimit, MultiXactStateData::multiWrapLimit, MULTIXACT_MEMBER_SAFE_THRESHOLD, MULTIXACT_MEMBERS_PER_PAGE, MultiXactIdPrecedes(), MultiXactOffsetWouldWrap(), MultiXactState, MXOffsetToMemberPage, MultiXactStateData::nextMXact, MultiXactStateData::nextOffset, OFFSET_WARN_SEGMENTS, MultiXactStateData::offsetStopLimit, MultiXactStateData::oldestMultiXactDB, MultiXactStateData::oldestOffset, MultiXactStateData::oldestOffsetKnown, PMSIGNAL_START_AUTOVAC_LAUNCHER, RecoveryInProgress(), SendPostmasterSignal(), SLRU_PAGES_PER_SEGMENT, START_CRIT_SECTION, and WARNING.
Referenced by MultiXactIdCreateFromMembers().
MultiXactId GetOldestMultiXactId | ( | void | ) |
Definition at line 2507 of file multixact.c.
References FirstMultiXactId, i, LW_SHARED, LWLockAcquire(), LWLockRelease(), MaxOldestSlot, MultiXactIdIsValid, MultiXactIdPrecedes(), MultiXactState, MultiXactStateData::nextMXact, OldestMemberMXactId, and OldestVisibleMXactId.
Referenced by heapam_relation_set_new_filelocator(), vac_update_datfrozenxid(), and vacuum_get_cutoffs().
|
static |
Definition at line 1975 of file multixact.c.
References LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), MultiXactIdToOffsetPage, MultiXactOffsetCtl, MultiXactState, MultiXactStateData::nextMXact, SimpleLruDoesPhysicalPageExist(), SimpleLruWritePage(), and ZeroMultiXactOffsetPage().
Referenced by MultiXactSetNextMXact().
void multixact_redo | ( | XLogReaderState * | record | ) |
Definition at line 3233 of file multixact.c.
References AdvanceNextFullTransactionIdPastXid(), Assert(), DEBUG1, elog(), xl_multixact_truncate::endTruncMemb, xl_multixact_truncate::endTruncOff, i, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), xl_multixact_create::members, xl_multixact_create::mid, xl_multixact_create::moff, MultiXactAdvanceNextMXact(), MultiXactIdToOffsetPage, MultiXactIdToOffsetSegment, MultiXactMemberCtl, MultiXactOffsetCtl, MXOffsetToMemberSegment, xl_multixact_create::nmembers, xl_multixact_truncate::oldestMultiDB, PANIC, PerformMembersTruncation(), PerformOffsetsTruncation(), RecordNewMultiXact(), SetMultiXactIdLimit(), SimpleLruWritePage(), SizeOfMultiXactTruncate, xl_multixact_truncate::startTruncMemb, xl_multixact_truncate::startTruncOff, TransactionIdPrecedes(), MultiXactMember::xid, XLOG_MULTIXACT_CREATE_ID, XLOG_MULTIXACT_TRUNCATE_ID, XLOG_MULTIXACT_ZERO_MEM_PAGE, XLOG_MULTIXACT_ZERO_OFF_PAGE, XLogRecGetData, XLogRecGetInfo, XLogRecGetXid, XLogRecHasAnyBlockRefs, XLR_INFO_MASK, ZeroMultiXactMemberPage(), and ZeroMultiXactOffsetPage().
void multixact_twophase_postabort | ( | TransactionId | xid, |
uint16 | info, | ||
void * | recdata, | ||
uint32 | len | ||
) |
Definition at line 1815 of file multixact.c.
References len, and multixact_twophase_postcommit().
void multixact_twophase_postcommit | ( | TransactionId | xid, |
uint16 | info, | ||
void * | recdata, | ||
uint32 | len | ||
) |
Definition at line 1800 of file multixact.c.
References Assert(), InvalidMultiXactId, len, OldestMemberMXactId, and TwoPhaseGetDummyBackendId().
Referenced by multixact_twophase_postabort().
void multixact_twophase_recover | ( | TransactionId | xid, |
uint16 | info, | ||
void * | recdata, | ||
uint32 | len | ||
) |
Definition at line 1779 of file multixact.c.
References Assert(), len, OldestMemberMXactId, and TwoPhaseGetDummyBackendId().
void MultiXactAdvanceNextMXact | ( | MultiXactId | minMulti, |
MultiXactOffset | minMultiOffset | ||
) |
Definition at line 2362 of file multixact.c.
References DEBUG2, debug_elog3, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), MultiXactIdPrecedes(), MultiXactOffsetPrecedes(), MultiXactState, MultiXactStateData::nextMXact, and MultiXactStateData::nextOffset.
Referenced by multixact_redo(), and xlog_redo().
void MultiXactAdvanceOldest | ( | MultiXactId | oldestMulti, |
Oid | oldestMultiDB | ||
) |
Definition at line 2387 of file multixact.c.
References Assert(), InRecovery, MultiXactIdPrecedes(), MultiXactState, MultiXactStateData::oldestMultiXactId, and SetMultiXactIdLimit().
Referenced by xlog_redo().
void MultiXactGetCheckptMulti | ( | bool | is_shutdown, |
MultiXactId * | nextMulti, | ||
MultiXactOffset * | nextMultiOffset, | ||
MultiXactId * | oldestMulti, | ||
Oid * | oldestMultiDB | ||
) |
Definition at line 2133 of file multixact.c.
References DEBUG2, debug_elog6, LW_SHARED, LWLockAcquire(), LWLockRelease(), MultiXactState, MultiXactStateData::nextMXact, MultiXactStateData::nextOffset, MultiXactStateData::oldestMultiXactDB, and MultiXactStateData::oldestMultiXactId.
Referenced by CreateCheckPoint().
MultiXactId MultiXactIdCreate | ( | TransactionId | xid1, |
MultiXactStatus | status1, | ||
TransactionId | xid2, | ||
MultiXactStatus | status2 | ||
) |
Definition at line 387 of file multixact.c.
References Assert(), DEBUG2, debug_elog3, MultiXactIdCreateFromMembers(), MultiXactIdIsValid, mxid_to_string(), MyBackendId, OldestMemberMXactId, MultiXactMember::status, TransactionIdEquals, TransactionIdIsValid, and MultiXactMember::xid.
Referenced by compute_new_xmax_infomask().
MultiXactId MultiXactIdCreateFromMembers | ( | int | nmembers, |
MultiXactMember * | members | ||
) |
Definition at line 768 of file multixact.c.
References DEBUG2, debug_elog2, debug_elog3, elog(), END_CRIT_SECTION, ERROR, GetNewMultiXactId(), i, InvalidMultiXactId, ISUPDATE_from_mxstatus, xl_multixact_create::mid, xl_multixact_create::moff, MultiXactIdIsValid, mXactCacheGetBySet(), mXactCachePut(), mxid_to_string(), xl_multixact_create::nmembers, RecordNewMultiXact(), SizeOfMultiXactCreate, XLOG_MULTIXACT_CREATE_ID, XLogBeginInsert(), XLogInsert(), and XLogRegisterData().
Referenced by FreezeMultiXactId(), MultiXactIdCreate(), and MultiXactIdExpand().
MultiXactId MultiXactIdExpand | ( | MultiXactId | multi, |
TransactionId | xid, | ||
MultiXactStatus | status | ||
) |
Definition at line 440 of file multixact.c.
References Assert(), DEBUG2, debug_elog3, debug_elog4, debug_elog5, GetMultiXactIdMembers(), i, ISUPDATE_from_mxstatus, j, MultiXactIdCreateFromMembers(), MultiXactIdIsValid, mxstatus_to_string(), MyBackendId, OldestMemberMXactId, palloc(), pfree(), MultiXactMember::status, TransactionIdDidCommit(), TransactionIdEquals, TransactionIdIsInProgress(), TransactionIdIsValid, and MultiXactMember::xid.
Referenced by compute_new_xmax_infomask().
bool MultiXactIdIsRunning | ( | MultiXactId | multi, |
bool | isLockOnly | ||
) |
Definition at line 552 of file multixact.c.
References DEBUG2, debug_elog2, debug_elog3, debug_elog4, GetMultiXactIdMembers(), i, pfree(), TransactionIdIsCurrentTransactionId(), and TransactionIdIsInProgress().
Referenced by compute_new_xmax_infomask(), FreezeMultiXactId(), HeapTupleSatisfiesUpdate(), and HeapTupleSatisfiesVacuumHorizon().
bool MultiXactIdPrecedes | ( | MultiXactId | multi1, |
MultiXactId | multi2 | ||
) |
Definition at line 3156 of file multixact.c.
Referenced by check_mxid_in_range(), copy_table_data(), do_start_worker(), FreezeMultiXactId(), GetMultiXactIdMembers(), GetNewMultiXactId(), GetOldestMultiXactId(), heap_prepare_freeze_tuple(), heap_tuple_should_freeze(), MultiXactAdvanceNextMXact(), MultiXactAdvanceOldest(), MultiXactIdSetOldestVisible(), MultiXactOffsetPagePrecedes(), relation_needs_vacanalyze(), SetMultiXactIdLimit(), TruncateMultiXact(), vac_truncate_clog(), vac_update_datfrozenxid(), vac_update_relstats(), vacuum_get_cutoffs(), and vacuum_xid_failsafe_check().
bool MultiXactIdPrecedesOrEquals | ( | MultiXactId | multi1, |
MultiXactId | multi2 | ||
) |
Definition at line 3170 of file multixact.c.
Referenced by check_mxid_in_range(), heap_tuple_should_freeze(), heap_vacuum_rel(), TruncateMultiXact(), and vacuum_get_cutoffs().
void MultiXactIdSetOldestMember | ( | void | ) |
Definition at line 626 of file multixact.c.
References DEBUG2, debug_elog4, FirstMultiXactId, LW_SHARED, LWLockAcquire(), LWLockRelease(), MultiXactIdIsValid, MultiXactState, MyBackendId, MultiXactStateData::nextMXact, and OldestMemberMXactId.
Referenced by heap_delete(), heap_lock_tuple(), heap_lock_updated_tuple(), and heap_update().
|
static |
Definition at line 683 of file multixact.c.
References DEBUG2, debug_elog4, FirstMultiXactId, i, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), MaxOldestSlot, MultiXactIdIsValid, MultiXactIdPrecedes(), MultiXactState, MyBackendId, MultiXactStateData::nextMXact, OldestMemberMXactId, and OldestVisibleMXactId.
Referenced by GetMultiXactIdMembers().
int MultiXactMemberFreezeThreshold | ( | void | ) |
Definition at line 2825 of file multixact.c.
References autovacuum_multixact_freeze_max_age, MULTIXACT_MEMBER_DANGER_THRESHOLD, MULTIXACT_MEMBER_SAFE_THRESHOLD, and ReadMultiXactCounts().
Referenced by do_autovacuum(), do_start_worker(), and vacuum_get_cutoffs().
|
static |
Definition at line 3136 of file multixact.c.
References MULTIXACT_MEMBERS_PER_PAGE, and MultiXactOffsetPrecedes().
Referenced by MultiXactShmemInit().
int multixactmemberssyncfiletag | ( | const FileTag * | ftag, |
char * | path | ||
) |
Definition at line 3418 of file multixact.c.
References MultiXactMemberCtl, and SlruSyncFileTag().
|
static |
Definition at line 3116 of file multixact.c.
References FirstMultiXactId, MULTIXACT_OFFSETS_PER_PAGE, and MultiXactIdPrecedes().
Referenced by MultiXactShmemInit().
|
static |
Definition at line 3182 of file multixact.c.
Referenced by MultiXactAdvanceNextMXact(), and MultiXactMemberPagePrecedes().
int multixactoffsetssyncfiletag | ( | const FileTag * | ftag, |
char * | path | ||
) |
Definition at line 3409 of file multixact.c.
References MultiXactOffsetCtl, and SlruSyncFileTag().
|
static |
void MultiXactSetNextMXact | ( | MultiXactId | nextMulti, |
MultiXactOffset | nextMultiOffset | ||
) |
Definition at line 2179 of file multixact.c.
References DEBUG2, debug_elog4, IsBinaryUpgrade, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), MaybeExtendOffsetSlru(), MultiXactState, MultiXactStateData::nextMXact, and MultiXactStateData::nextOffset.
Referenced by BootStrapXLOG(), StartupXLOG(), and xlog_redo().
void MultiXactShmemInit | ( | void | ) |
Definition at line 1844 of file multixact.c.
References Assert(), DEBUG2, debug_elog2, IsUnderPostmaster, LWTRANCHE_MULTIXACTMEMBER_BUFFER, LWTRANCHE_MULTIXACTOFFSET_BUFFER, MaxOldestSlot, MemSet, MULTIXACT_OFFSETS_PER_PAGE, MultiXactMemberCtl, MultiXactMemberPagePrecedes(), MultiXactOffsetCtl, MultiXactOffsetPagePrecedes(), MultiXactState, NUM_MULTIXACTMEMBER_BUFFERS, NUM_MULTIXACTOFFSET_BUFFERS, OldestMemberMXactId, OldestVisibleMXactId, MultiXactStateData::perBackendXactIds, SHARED_MULTIXACT_STATE_SIZE, ShmemInitStruct(), SimpleLruInit(), SlruPagePrecedesUnitTests, SYNC_HANDLER_MULTIXACT_MEMBER, and SYNC_HANDLER_MULTIXACT_OFFSET.
Referenced by CreateSharedMemoryAndSemaphores().
Size MultiXactShmemSize | ( | void | ) |
Definition at line 1827 of file multixact.c.
References add_size(), NUM_MULTIXACTMEMBER_BUFFERS, NUM_MULTIXACTOFFSET_BUFFERS, SHARED_MULTIXACT_STATE_SIZE, and SimpleLruShmemSize().
Referenced by CalculateShmemSize().
|
static |
Definition at line 1542 of file multixact.c.
References dlist_iter::cur, dclist_container, dclist_foreach, dclist_move_head(), DEBUG2, debug_elog2, debug_elog3, mXactCacheEnt::members, mXactCacheEnt::multi, MXactCache, mxid_to_string(), mXactCacheEnt::nmembers, and palloc().
Referenced by GetMultiXactIdMembers().
|
static |
Definition at line 1499 of file multixact.c.
References dlist_iter::cur, dclist_container, dclist_foreach, dclist_move_head(), DEBUG2, debug_elog2, debug_elog3, InvalidMultiXactId, mXactCacheEnt::members, mXactCacheEnt::multi, MXactCache, mxactMemberComparator(), mxid_to_string(), mXactCacheEnt::nmembers, and qsort.
Referenced by MultiXactIdCreateFromMembers().
|
static |
Definition at line 1589 of file multixact.c.
References ALLOCSET_SMALL_SIZES, AllocSetContextCreate, dclist_container, dclist_count(), dclist_delete_from(), dclist_push_head(), dclist_tail_node(), DEBUG2, debug_elog2, debug_elog3, MAX_CACHE_ENTRIES, mXactCacheEnt::members, MemoryContextAlloc(), mXactCacheEnt::multi, MXactCache, MXactContext, mxactMemberComparator(), mxid_to_string(), mXactCacheEnt::nmembers, mXactCacheEnt::node, pfree(), qsort, and TopTransactionContext.
Referenced by GetMultiXactIdMembers(), and MultiXactIdCreateFromMembers().
|
static |
Definition at line 1469 of file multixact.c.
References MultiXactMember::status, and MultiXactMember::xid.
Referenced by mXactCacheGetBySet(), and mXactCachePut().
char* mxid_to_string | ( | MultiXactId | multi, |
int | nmembers, | ||
MultiXactMember * | members | ||
) |
Definition at line 1657 of file multixact.c.
References appendStringInfo(), appendStringInfoChar(), buf, i, initStringInfo(), MemoryContextStrdup(), mxstatus_to_string(), pfree(), generate_unaccent_rules::str, and TopMemoryContext.
Referenced by GetMultiXactIdMembers(), MultiXactIdCreate(), MultiXactIdCreateFromMembers(), mXactCacheGetById(), mXactCacheGetBySet(), and mXactCachePut().
|
static |
Definition at line 1634 of file multixact.c.
References elog(), ERROR, MultiXactStatusForKeyShare, MultiXactStatusForNoKeyUpdate, MultiXactStatusForShare, MultiXactStatusForUpdate, MultiXactStatusNoKeyUpdate, and MultiXactStatusUpdate.
Referenced by MultiXactIdExpand(), mxid_to_string(), and pg_get_multixact_members().
|
static |
Definition at line 2888 of file multixact.c.
References DEBUG2, elog(), MaxMultiXactOffset, MultiXactMemberCtl, MXOffsetToMemberSegment, and SlruDeleteSegment().
Referenced by multixact_redo(), and TruncateMultiXact().
|
static |
Definition at line 2916 of file multixact.c.
References MultiXactIdToOffsetPage, MultiXactOffsetCtl, PreviousMultiXactId, and SimpleLruTruncate().
Referenced by multixact_redo(), and TruncateMultiXact().
Datum pg_get_multixact_members | ( | PG_FUNCTION_ARGS | ) |
Definition at line 3344 of file multixact.c.
References FuncCallContext::attinmeta, BuildTupleFromCStrings(), elog(), ereport, errcode(), errmsg(), ERROR, FirstMultiXactId, get_call_result_type(), GetMultiXactIdMembers(), HeapTupleGetDatum(), MemoryContextSwitchTo(), FuncCallContext::multi_call_memory_ctx, mxstatus_to_string(), palloc(), pfree(), PG_GETARG_TRANSACTIONID, psprintf(), SRF_FIRSTCALL_INIT, SRF_IS_FIRSTCALL, SRF_PERCALL_SETUP, SRF_RETURN_DONE, SRF_RETURN_NEXT, FuncCallContext::tuple_desc, TupleDescGetAttInMetadata(), TYPEFUNC_COMPOSITE, FuncCallContext::user_fctx, values, and while().
void PostPrepare_MultiXact | ( | TransactionId | xid | ) |
Definition at line 1730 of file multixact.c.
References dclist_init(), InvalidMultiXactId, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), MultiXactIdIsValid, MXactCache, MXactContext, MyBackendId, OldestMemberMXactId, OldestVisibleMXactId, and TwoPhaseGetDummyBackendId().
Referenced by PrepareTransaction().
|
static |
Definition at line 2773 of file multixact.c.
References LW_SHARED, LWLockAcquire(), LWLockRelease(), MultiXactState, MultiXactStateData::nextMXact, MultiXactStateData::nextOffset, MultiXactStateData::oldestMultiXactId, MultiXactStateData::oldestOffset, and MultiXactStateData::oldestOffsetKnown.
Referenced by MultiXactMemberFreezeThreshold().
void ReadMultiXactIdRange | ( | MultiXactId * | oldest, |
MultiXactId * | next | ||
) |
Definition at line 744 of file multixact.c.
References FirstMultiXactId, LW_SHARED, LWLockAcquire(), LWLockRelease(), MultiXactState, next, MultiXactStateData::nextMXact, and MultiXactStateData::oldestMultiXactId.
Referenced by update_cached_mxid_range().
MultiXactId ReadNextMultiXactId | ( | void | ) |
Definition at line 724 of file multixact.c.
References FirstMultiXactId, LW_SHARED, LWLockAcquire(), LWLockRelease(), MultiXactState, and MultiXactStateData::nextMXact.
Referenced by ATRewriteTables(), AutoVacWorkerMain(), do_start_worker(), mxid_age(), refresh_by_heap_swap(), vac_update_datfrozenxid(), vac_update_relstats(), vacuum_get_cutoffs(), and vacuum_xid_failsafe_check().
|
static |
Definition at line 864 of file multixact.c.
References Assert(), i, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), MultiXactIdToOffsetEntry, MultiXactIdToOffsetPage, MultiXactMemberCtl, MultiXactOffsetCtl, MultiXactStatusUpdate, MXACT_MEMBER_BITS_PER_XACT, MXOffsetToFlagsBitShift, MXOffsetToFlagsOffset, MXOffsetToMemberOffset, MXOffsetToMemberPage, SimpleLruReadPage(), MultiXactMember::status, and MultiXactMember::xid.
Referenced by multixact_redo(), and MultiXactIdCreateFromMembers().
void SetMultiXactIdLimit | ( | MultiXactId | oldest_datminmxid, |
Oid | oldest_datoid, | ||
bool | is_startup | ||
) |
Definition at line 2213 of file multixact.c.
References Assert(), autovacuum_multixact_freeze_max_age, DEBUG1, ereport, errhint(), errmsg_internal(), errmsg_plural(), MultiXactStateData::finishedStartup, FirstMultiXactId, get_database_name(), InRecovery, IsTransactionState(), IsUnderPostmaster, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), MaxMultiXactId, MultiXactStateData::multiStopLimit, MultiXactStateData::multiVacLimit, MultiXactStateData::multiWarnLimit, MultiXactStateData::multiWrapLimit, MultiXactIdIsValid, MultiXactIdPrecedes(), MultiXactState, MultiXactStateData::nextMXact, MultiXactStateData::oldestMultiXactDB, MultiXactStateData::oldestMultiXactId, PMSIGNAL_START_AUTOVAC_LAUNCHER, SendPostmasterSignal(), SetOffsetVacuumLimit(), and WARNING.
Referenced by BootStrapXLOG(), multixact_redo(), MultiXactAdvanceOldest(), StartupXLOG(), TrimMultiXact(), and vac_truncate_clog().
Definition at line 2560 of file multixact.c.
References Assert(), DEBUG1, ereport, errmsg(), errmsg_internal(), find_multixact_start(), MultiXactStateData::finishedStartup, LOG, LW_EXCLUSIVE, LW_SHARED, LWLockAcquire(), LWLockRelease(), MULTIXACT_MEMBER_SAFE_THRESHOLD, MULTIXACT_MEMBERS_PER_PAGE, MultiXactState, MultiXactStateData::nextMXact, MultiXactStateData::nextOffset, MultiXactStateData::offsetStopLimit, MultiXactStateData::oldestMultiXactId, MultiXactStateData::oldestOffset, MultiXactStateData::oldestOffsetKnown, and SLRU_PAGES_PER_SEGMENT.
Referenced by SetMultiXactIdLimit().
|
static |
Definition at line 2865 of file multixact.c.
References data, mxtruncinfo::earliestExistingPage, and SlruCtlData::PagePrecedes.
Referenced by TruncateMultiXact().
void StartupMultiXact | ( | void | ) |
Definition at line 2008 of file multixact.c.
References MultiXactIdToOffsetPage, MultiXactMemberCtl, MultiXactOffsetCtl, MultiXactState, MXOffsetToMemberPage, MultiXactStateData::nextMXact, and MultiXactStateData::nextOffset.
Referenced by StartupXLOG().
void TrimMultiXact | ( | void | ) |
Definition at line 2031 of file multixact.c.
References MultiXactStateData::finishedStartup, LW_EXCLUSIVE, LW_SHARED, LWLockAcquire(), LWLockRelease(), MemSet, MultiXactIdToOffsetEntry, MultiXactIdToOffsetPage, MultiXactMemberCtl, MultiXactOffsetCtl, MultiXactState, MXOffsetToFlagsOffset, MXOffsetToMemberOffset, MXOffsetToMemberPage, MultiXactStateData::nextMXact, MultiXactStateData::nextOffset, MultiXactStateData::oldestMultiXactDB, MultiXactStateData::oldestMultiXactId, SetMultiXactIdLimit(), and SimpleLruReadPage().
Referenced by StartupXLOG().
void TruncateMultiXact | ( | MultiXactId | newOldestMulti, |
Oid | newOldestMultiDB | ||
) |
Definition at line 2941 of file multixact.c.
References Assert(), DEBUG1, DELAY_CHKPT_START, PGPROC::delayChkptFlags, mxtruncinfo::earliestExistingPage, elog(), END_CRIT_SECTION, ereport, errmsg(), find_multixact_start(), MultiXactStateData::finishedStartup, FirstMultiXactId, LOG, LW_EXCLUSIVE, LW_SHARED, LWLockAcquire(), LWLockRelease(), MULTIXACT_OFFSETS_PER_PAGE, MultiXactIdIsValid, MultiXactIdPrecedes(), MultiXactIdPrecedesOrEquals(), MultiXactIdToOffsetSegment, MultiXactOffsetCtl, MultiXactState, MXOffsetToMemberSegment, MyProc, MultiXactStateData::nextMXact, MultiXactStateData::nextOffset, MultiXactStateData::oldestMultiXactDB, MultiXactStateData::oldestMultiXactId, PerformMembersTruncation(), PerformOffsetsTruncation(), RecoveryInProgress(), SlruScanDirCbFindEarliest(), SlruScanDirectory(), START_CRIT_SECTION, and WriteMTruncateXlogRec().
Referenced by vac_truncate_clog().
|
static |
Definition at line 3208 of file multixact.c.
References xl_multixact_truncate::endTruncMemb, xl_multixact_truncate::endTruncOff, xl_multixact_truncate::oldestMultiDB, SizeOfMultiXactTruncate, xl_multixact_truncate::startTruncMemb, xl_multixact_truncate::startTruncOff, XLOG_MULTIXACT_TRUNCATE_ID, XLogBeginInsert(), XLogFlush(), XLogInsert(), and XLogRegisterData().
Referenced by TruncateMultiXact().
|
static |
Definition at line 3194 of file multixact.c.
References XLogBeginInsert(), XLogInsert(), and XLogRegisterData().
Referenced by ZeroMultiXactMemberPage(), and ZeroMultiXactOffsetPage().
|
static |
Definition at line 1947 of file multixact.c.
References MultiXactMemberCtl, SimpleLruZeroPage(), WriteMZeroPageXlogRec(), and XLOG_MULTIXACT_ZERO_MEM_PAGE.
Referenced by BootStrapMultiXact(), ExtendMultiXactMember(), and multixact_redo().
|
static |
Definition at line 1931 of file multixact.c.
References MultiXactOffsetCtl, SimpleLruZeroPage(), WriteMZeroPageXlogRec(), and XLOG_MULTIXACT_ZERO_OFF_PAGE.
Referenced by BootStrapMultiXact(), ExtendMultiXactOffset(), MaybeExtendOffsetSlru(), and multixact_redo().
|
static |
Definition at line 188 of file multixact.c.
|
static |
Definition at line 187 of file multixact.c.
|
static |
Definition at line 293 of file multixact.c.
Referenced by find_multixact_start(), GetMultiXactIdMembers(), GetNewMultiXactId(), GetOldestMultiXactId(), MaybeExtendOffsetSlru(), MultiXactAdvanceNextMXact(), MultiXactAdvanceOldest(), MultiXactGetCheckptMulti(), MultiXactIdSetOldestMember(), MultiXactIdSetOldestVisible(), MultiXactSetNextMXact(), MultiXactShmemInit(), ReadMultiXactCounts(), ReadMultiXactIdRange(), ReadNextMultiXactId(), SetMultiXactIdLimit(), SetOffsetVacuumLimit(), StartupMultiXact(), TrimMultiXact(), and TruncateMultiXact().
|
static |
Definition at line 324 of file multixact.c.
Referenced by AtEOXact_MultiXact(), mXactCacheGetById(), mXactCacheGetBySet(), mXactCachePut(), and PostPrepare_MultiXact().
|
static |
Definition at line 325 of file multixact.c.
Referenced by AtEOXact_MultiXact(), mXactCachePut(), and PostPrepare_MultiXact().
|
static |
Definition at line 294 of file multixact.c.
Referenced by AtEOXact_MultiXact(), AtPrepare_MultiXact(), GetOldestMultiXactId(), multixact_twophase_postcommit(), multixact_twophase_recover(), MultiXactIdCreate(), MultiXactIdExpand(), MultiXactIdSetOldestMember(), MultiXactIdSetOldestVisible(), MultiXactShmemInit(), and PostPrepare_MultiXact().
|
static |
Definition at line 295 of file multixact.c.
Referenced by AtEOXact_MultiXact(), GetMultiXactIdMembers(), GetOldestMultiXactId(), MultiXactIdSetOldestVisible(), MultiXactShmemInit(), and PostPrepare_MultiXact().