PostgreSQL Source Code git master
Loading...
Searching...
No Matches
standby.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * standby.h
4 * Definitions for hot standby mode.
5 *
6 *
7 * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
9 *
10 * src/include/storage/standby.h
11 *
12 *-------------------------------------------------------------------------
13 */
14#ifndef STANDBY_H
15#define STANDBY_H
16
17#include "datatype/timestamp.h"
18#include "storage/lock.h"
20#include "storage/standbydefs.h"
21
22/* User-settable GUC parameters */
26
27/* Recovery conflict reasons */
28typedef enum
29{
30 /* Backend is connected to a database that is being dropped */
32
33 /* Backend is using a tablespace that is being dropped */
35
36 /* Backend is holding a lock that is blocking recovery */
38
39 /* Backend is holding a snapshot that is blocking recovery */
41
42 /* Backend is using a logical replication slot that must be invalidated */
44
45 /* Backend is holding a pin on a buffer that is blocking recovery */
47
48 /*
49 * The backend is requested to check for deadlocks. The startup process
50 * doesn't check for deadlock directly, because we want to kill one of the
51 * other backends instead of the startup process.
52 */
54
55 /*
56 * Like RECOVERY_CONFLICT_STARTUP_DEADLOCK is, but the suspected deadlock
57 * involves a buffer pin that some other backend is holding. That needs
58 * special checking because the normal deadlock detector doesn't track the
59 * buffer pins.
60 */
63
64#define NUM_RECOVERY_CONFLICT_REASONS (RECOVERY_CONFLICT_BUFFERPIN_DEADLOCK + 1)
65
68
69extern void ResolveRecoveryConflictWithSnapshot(TransactionId snapshotConflictHorizon,
70 bool isCatalogRel,
71 RelFileLocator locator);
72extern void ResolveRecoveryConflictWithSnapshotFullXid(FullTransactionId snapshotConflictHorizon,
73 bool isCatalogRel,
74 RelFileLocator locator);
77
80extern void CheckRecoveryConflictDeadlock(void);
81extern void StandbyDeadLockHandler(void);
82extern void StandbyTimeoutHandler(void);
83extern void StandbyLockTimeoutHandler(void);
86 bool still_waiting);
87
88/*
89 * Standby Rmgr (RM_STANDBY_ID)
90 *
91 * Standby recovery manager exists to perform actions that are required
92 * to make hot standby work. That includes logging AccessExclusiveLocks taken
93 * by transactions and running-xacts snapshots.
94 */
95extern void StandbyAcquireAccessExclusiveLock(TransactionId xid, Oid dbOid, Oid relOid);
97 int nsubxids, TransactionId *subxids);
98extern void StandbyReleaseAllLocks(void);
100
101#define MinSizeOfXactRunningXacts offsetof(xl_running_xacts, xids)
102
103
104/*
105 * Declarations for GetRunningTransactionData(). Similar to Snapshots, but
106 * not quite. This has nothing at all to do with visibility on this server,
107 * so this is completely separate from snapmgr.c and snapmgr.h.
108 * This data is important for creating the initial snapshot state on a
109 * standby server. We need lots more information than a normal snapshot,
110 * hence we use a specific data structure for our needs. This data
111 * is written to WAL as a separate record immediately after each
112 * checkpoint. That means that wherever we start a standby from we will
113 * almost immediately see the data we need to begin executing queries.
114 */
115
116typedef enum
117{
118 SUBXIDS_IN_ARRAY, /* xids array includes all running subxids */
119 SUBXIDS_MISSING, /* snapshot overflowed, subxids are missing */
120 SUBXIDS_IN_SUBTRANS, /* subxids are not included in 'xids', but
121 * pg_subtrans is fully up-to-date */
123
125{
126 int xcnt; /* # of xact ids in xids[] */
127 int subxcnt; /* # of subxact ids in xids[] */
129 TransactionId nextXid; /* xid from TransamVariables->nextXid */
130 TransactionId oldestRunningXid; /* *not* oldestXmin */
131 TransactionId oldestDatabaseRunningXid; /* same as above, but within the
132 * current database */
133 TransactionId latestCompletedXid; /* so we can set xmax */
134
135 TransactionId *xids; /* array of (sub)xids still running */
137
139
140extern void LogAccessExclusiveLock(Oid dbOid, Oid relOid);
141extern void LogAccessExclusiveLockPrepare(void);
142
143extern XLogRecPtr LogStandbySnapshot(void);
144extern void LogStandbyInvalidations(int nmsgs, SharedInvalidationMessage *msgs,
145 bool relcacheInitFileInval);
146
147#endif /* STANDBY_H */
Datum now(PG_FUNCTION_ARGS)
Definition timestamp.c:1609
#define PGDLLIMPORT
Definition c.h:1334
uint32 TransactionId
Definition c.h:666
int64 TimestampTz
Definition timestamp.h:39
unsigned int Oid
static int fb(int x)
void ResolveRecoveryConflictWithSnapshotFullXid(FullTransactionId snapshotConflictHorizon, bool isCatalogRel, RelFileLocator locator)
Definition standby.c:513
RunningTransactionsData * RunningTransactions
Definition standby.h:138
void StandbyTimeoutHandler(void)
Definition standby.c:945
void ResolveRecoveryConflictWithBufferPin(void)
Definition standby.c:793
void StandbyLockTimeoutHandler(void)
Definition standby.c:954
RecoveryConflictReason
Definition standby.h:29
@ RECOVERY_CONFLICT_TABLESPACE
Definition standby.h:34
@ RECOVERY_CONFLICT_SNAPSHOT
Definition standby.h:40
@ RECOVERY_CONFLICT_LOCK
Definition standby.h:37
@ RECOVERY_CONFLICT_DATABASE
Definition standby.h:31
@ RECOVERY_CONFLICT_STARTUP_DEADLOCK
Definition standby.h:53
@ RECOVERY_CONFLICT_BUFFERPIN
Definition standby.h:46
@ RECOVERY_CONFLICT_BUFFERPIN_DEADLOCK
Definition standby.h:61
@ RECOVERY_CONFLICT_LOGICALSLOT
Definition standby.h:43
void StandbyDeadLockHandler(void)
Definition standby.c:936
XLogRecPtr LogStandbySnapshot(void)
Definition standby.c:1282
void CheckRecoveryConflictDeadlock(void)
Definition standby.c:905
void InitRecoveryTransactionEnvironment(void)
Definition standby.c:95
void ResolveRecoveryConflictWithTablespace(Oid tsid)
Definition standby.c:540
void ResolveRecoveryConflictWithDatabase(Oid dbid)
Definition standby.c:570
void StandbyReleaseLockTree(TransactionId xid, int nsubxids, TransactionId *subxids)
Definition standby.c:1092
void StandbyReleaseOldLocks(TransactionId oldxid)
Definition standby.c:1130
void ResolveRecoveryConflictWithSnapshot(TransactionId snapshotConflictHorizon, bool isCatalogRel, RelFileLocator locator)
Definition standby.c:469
void LogAccessExclusiveLockPrepare(void)
Definition standby.c:1449
void LogStandbyInvalidations(int nmsgs, SharedInvalidationMessage *msgs, bool relcacheInitFileInval)
Definition standby.c:1471
void StandbyAcquireAccessExclusiveLock(TransactionId xid, Oid dbOid, Oid relOid)
Definition standby.c:986
void LogAccessExclusiveLock(Oid dbOid, Oid relOid)
Definition standby.c:1432
PGDLLIMPORT bool log_recovery_conflict_waits
Definition standby.c:42
void LogRecoveryConflict(RecoveryConflictReason reason, TimestampTz wait_start, TimestampTz now, VirtualTransactionId *wait_list, bool still_waiting)
Definition standby.c:274
subxids_array_status
Definition standby.h:117
@ SUBXIDS_IN_SUBTRANS
Definition standby.h:120
@ SUBXIDS_MISSING
Definition standby.h:119
@ SUBXIDS_IN_ARRAY
Definition standby.h:118
void StandbyReleaseAllLocks(void)
Definition standby.c:1106
PGDLLIMPORT int max_standby_archive_delay
Definition standby.c:40
void ResolveRecoveryConflictWithLock(LOCKTAG locktag, bool logging_conflict)
Definition standby.c:624
void ShutdownRecoveryTransactionEnvironment(void)
Definition standby.c:161
PGDLLIMPORT int max_standby_streaming_delay
Definition standby.c:41
TransactionId oldestRunningXid
Definition standby.h:130
TransactionId nextXid
Definition standby.h:129
TransactionId oldestDatabaseRunningXid
Definition standby.h:131
TransactionId latestCompletedXid
Definition standby.h:133
subxids_array_status subxid_status
Definition standby.h:128
TransactionId * xids
Definition standby.h:135
uint64 XLogRecPtr
Definition xlogdefs.h:21