PostgreSQL Source Code  git master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
procarray.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * procarray.h
4  * POSTGRES process array definitions.
5  *
6  *
7  * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/storage/procarray.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef PROCARRAY_H
15 #define PROCARRAY_H
16 
17 #include "storage/lock.h"
18 #include "storage/standby.h"
19 #include "utils/relcache.h"
20 #include "utils/snapshot.h"
21 
22 
23 /*
24  * These are to implement PROCARRAY_FLAGS_XXX
25  *
26  * Note: These flags are cloned from PROC_XXX flags in src/include/storage/proc.h
27  * to avoid forcing to include proc.h when including procarray.h. So if you modify
28  * PROC_XXX flags, you need to modify these flags.
29  */
30 #define PROCARRAY_VACUUM_FLAG 0x02 /* currently running lazy vacuum */
31 #define PROCARRAY_ANALYZE_FLAG 0x04 /* currently running analyze */
32 #define PROCARRAY_LOGICAL_DECODING_FLAG 0x10 /* currently doing logical
33  * decoding outside xact */
34 
35 /* Use the following flags as an input "flags" to GetOldestXmin function */
36 /* Consider all backends except for logical decoding ones which manage xmin separately */
37 #define PROCARRAY_FLAGS_DEFAULT PROCARRAY_LOGICAL_DECODING_FLAG
38 /* Ignore vacuum backends */
39 #define PROCARRAY_FLAGS_VACUUM PROCARRAY_FLAGS_DEFAULT | PROCARRAY_VACUUM_FLAG
40 /* Ignore analyze backends */
41 #define PROCARRAY_FLAGS_ANALYZE PROCARRAY_FLAGS_DEFAULT | PROCARRAY_ANALYZE_FLAG
42 /* Ignore both vacuum and analyze backends */
43 #define PROCARRAY_FLAGS_VACUUM_ANALYZE PROCARRAY_FLAGS_DEFAULT | PROCARRAY_VACUUM_FLAG | PROCARRAY_ANALYZE_FLAG
44 
45 extern Size ProcArrayShmemSize(void);
46 extern void CreateSharedProcArray(void);
47 extern void ProcArrayAdd(PGPROC *proc);
48 extern void ProcArrayRemove(PGPROC *proc, TransactionId latestXid);
49 
50 extern void ProcArrayEndTransaction(PGPROC *proc, TransactionId latestXid);
51 extern void ProcArrayClearTransaction(PGPROC *proc);
52 
53 extern void ProcArrayInitRecovery(TransactionId initializedUptoXID);
56  int nsubxids, TransactionId *subxids);
57 
60  int nsubxids, TransactionId *subxids,
61  TransactionId max_xid);
62 extern void ExpireAllKnownAssignedTransactionIds(void);
64 
65 extern int GetMaxSnapshotXidCount(void);
66 extern int GetMaxSnapshotSubxidCount(void);
67 
68 extern Snapshot GetSnapshotData(Snapshot snapshot);
69 
71  TransactionId sourcexid);
72 extern bool ProcArrayInstallRestoredXmin(TransactionId xmin, PGPROC *proc);
73 
75 
77 extern bool TransactionIdIsActive(TransactionId xid);
78 extern TransactionId GetOldestXmin(Relation rel, int flags);
81 
83 extern bool HaveVirtualXIDsDelayingChkpt(VirtualTransactionId *vxids, int nvxids);
84 
85 extern PGPROC *BackendPidGetProc(int pid);
86 extern PGPROC *BackendPidGetProcWithLock(int pid);
87 extern int BackendXidGetPid(TransactionId xid);
88 extern bool IsBackendPid(int pid);
89 
91  bool excludeXmin0, bool allDbs, int excludeVacuum,
92  int *nvxids);
95 
96 extern bool MinimumActiveBackends(int min);
97 extern int CountDBBackends(Oid databaseid);
98 extern int CountDBConnections(Oid databaseid);
99 extern void CancelDBBackends(Oid databaseid, ProcSignalReason sigmode, bool conflictPending);
100 extern int CountUserBackends(Oid roleid);
101 extern bool CountOtherDBBackends(Oid databaseId,
102  int *nbackends, int *nprepared);
103 
105  int nxids, const TransactionId *xids,
106  TransactionId latestXid);
107 
109  TransactionId catalog_xmin, bool already_locked);
110 
112  TransactionId *catalog_xmin);
113 
114 #endif /* PROCARRAY_H */
bool TransactionIdIsActive(TransactionId xid)
Definition: procarray.c:1212
void ProcArrayInitRecovery(TransactionId initializedUptoXID)
Definition: procarray.c:633
TransactionId GetOldestXmin(Relation rel, int flags)
Definition: procarray.c:1307
bool IsBackendPid(int pid)
Definition: procarray.c:2419
uint32 TransactionId
Definition: c.h:397
void ProcArraySetReplicationSlotXmin(TransactionId xmin, TransactionId catalog_xmin, bool already_locked)
Definition: procarray.c:2942
PGPROC * BackendPidGetProcWithLock(int pid)
Definition: procarray.c:2347
void CreateSharedProcArray(void)
Definition: procarray.c:220
bool ProcArrayInstallRestoredXmin(TransactionId xmin, PGPROC *proc)
Definition: procarray.c:1858
Size ProcArrayShmemSize(void)
Definition: procarray.c:178
int BackendXidGetPid(TransactionId xid)
Definition: procarray.c:2384
int CountUserBackends(Oid roleid)
Definition: procarray.c:2818
TransactionId GetOldestSafeDecodingTransactionId(void)
Definition: procarray.c:2144
VirtualTransactionId * GetCurrentVirtualXIDs(TransactionId limitXmin, bool excludeXmin0, bool allDbs, int excludeVacuum, int *nvxids)
Definition: procarray.c:2452
unsigned int Oid
Definition: postgres_ext.h:31
int GetMaxSnapshotXidCount(void)
Definition: procarray.c:1446
void ExpireOldKnownAssignedTransactionIds(TransactionId xid)
Definition: procarray.c:3261
int GetMaxSnapshotSubxidCount(void)
Definition: procarray.c:1457
RunningTransactions GetRunningTransactionData(void)
Definition: procarray.c:1920
bool HaveVirtualXIDsDelayingChkpt(VirtualTransactionId *vxids, int nvxids)
Definition: procarray.c:2277
Snapshot GetSnapshotData(Snapshot snapshot)
Definition: procarray.c:1498
void ProcArrayAdd(PGPROC *proc)
Definition: procarray.c:273
pid_t CancelVirtualTransaction(VirtualTransactionId vxid, ProcSignalReason sigmode)
Definition: procarray.c:2615
TransactionId GetOldestActiveTransactionId(void)
Definition: procarray.c:2078
void ProcArrayApplyXidAssignment(TransactionId topxid, int nsubxids, TransactionId *subxids)
Definition: procarray.c:911
bool CountOtherDBBackends(Oid databaseId, int *nbackends, int *nprepared)
Definition: procarray.c:2868
PGPROC * BackendPidGetProc(int pid)
Definition: procarray.c:2324
void ProcArrayApplyRecoveryInfo(RunningTransactions running)
Definition: procarray.c:664
bool ProcArrayInstallImportedXmin(TransactionId xmin, TransactionId sourcexid)
Definition: procarray.c:1786
int CountDBConnections(Oid databaseid)
Definition: procarray.c:2747
void XidCacheRemoveRunningXids(TransactionId xid, int nxids, const TransactionId *xids, TransactionId latestXid)
Definition: procarray.c:2994
void ProcArrayRemove(PGPROC *proc, TransactionId latestXid)
Definition: procarray.c:331
void ProcArrayEndTransaction(PGPROC *proc, TransactionId latestXid)
Definition: procarray.c:394
void RecordKnownAssignedTransactionIds(TransactionId xid)
Definition: procarray.c:3151
size_t Size
Definition: c.h:356
bool MinimumActiveBackends(int min)
Definition: procarray.c:2663
VirtualTransactionId * GetVirtualXIDsDelayingChkpt(int *nvxids)
Definition: procarray.c:2232
void ProcArrayClearTransaction(PGPROC *proc)
Definition: procarray.c:601
int CountDBBackends(Oid databaseid)
Definition: procarray.c:2717
void CancelDBBackends(Oid databaseid, ProcSignalReason sigmode, bool conflictPending)
Definition: procarray.c:2778
void ExpireTreeKnownAssignedTransactionIds(TransactionId xid, int nsubxids, TransactionId *subxids, TransactionId max_xid)
Definition: procarray.c:3224
ProcSignalReason
Definition: procsignal.h:30
void ProcArrayGetReplicationSlotXmin(TransactionId *xmin, TransactionId *catalog_xmin)
Definition: procarray.c:2964
void ExpireAllKnownAssignedTransactionIds(void)
Definition: procarray.c:3249
bool TransactionIdIsInProgress(TransactionId xid)
Definition: procarray.c:995
Definition: proc.h:89
VirtualTransactionId * GetConflictingVirtualXIDs(TransactionId limitXmin, Oid dbOid)
Definition: procarray.c:2540