Keep track of transaction commit timestamps
Transactions can now set their commit timestamp directly as they commit,
or an external transaction commit timestamp can be fed from an outside
system using the new function TransactionTreeSetCommitTsData(). This
data is crash-safe, and truncated at Xid freeze point, same as pg_clog.
This module is disabled by default because it causes a performance hit,
but can be enabled in postgresql.conf requiring only a server restart.
A new test in src/test/modules is included.
Catalog version bumped due to the new subdirectory within PGDATA and a
couple of new SQL functions.
Authors: Álvaro Herrera and Petr Jelínek
Reviewed to varying degrees by Michael Paquier, Andres Freund, Robert
Haas, Amit Kapila, Fujii Masao, Jaime Casanova, Simon Riggs, Steven
Singer, Peter Eisentraut
2014-12-03 15:53:02 +01:00
|
|
|
/*
|
|
|
|
* commit_ts.h
|
|
|
|
*
|
|
|
|
* PostgreSQL commit timestamp manager
|
|
|
|
*
|
2015-01-06 17:43:47 +01:00
|
|
|
* Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
|
Keep track of transaction commit timestamps
Transactions can now set their commit timestamp directly as they commit,
or an external transaction commit timestamp can be fed from an outside
system using the new function TransactionTreeSetCommitTsData(). This
data is crash-safe, and truncated at Xid freeze point, same as pg_clog.
This module is disabled by default because it causes a performance hit,
but can be enabled in postgresql.conf requiring only a server restart.
A new test in src/test/modules is included.
Catalog version bumped due to the new subdirectory within PGDATA and a
couple of new SQL functions.
Authors: Álvaro Herrera and Petr Jelínek
Reviewed to varying degrees by Michael Paquier, Andres Freund, Robert
Haas, Amit Kapila, Fujii Masao, Jaime Casanova, Simon Riggs, Steven
Singer, Peter Eisentraut
2014-12-03 15:53:02 +01:00
|
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
|
|
*
|
|
|
|
* src/include/access/commit_ts.h
|
|
|
|
*/
|
|
|
|
#ifndef COMMIT_TS_H
|
|
|
|
#define COMMIT_TS_H
|
|
|
|
|
|
|
|
#include "access/xlog.h"
|
|
|
|
#include "datatype/timestamp.h"
|
|
|
|
#include "utils/guc.h"
|
|
|
|
|
|
|
|
|
|
|
|
extern PGDLLIMPORT bool track_commit_timestamp;
|
|
|
|
|
|
|
|
extern bool check_track_commit_timestamp(bool *newval, void **extra,
|
|
|
|
GucSource source);
|
|
|
|
|
|
|
|
typedef uint32 CommitTsNodeId;
|
|
|
|
#define InvalidCommitTsNodeId 0
|
|
|
|
|
|
|
|
extern void CommitTsSetDefaultNodeId(CommitTsNodeId nodeid);
|
|
|
|
extern CommitTsNodeId CommitTsGetDefaultNodeId(void);
|
|
|
|
extern void TransactionTreeSetCommitTsData(TransactionId xid, int nsubxids,
|
|
|
|
TransactionId *subxids, TimestampTz timestamp,
|
|
|
|
CommitTsNodeId nodeid, bool do_xlog);
|
|
|
|
extern bool TransactionIdGetCommitTsData(TransactionId xid,
|
|
|
|
TimestampTz *ts, CommitTsNodeId *nodeid);
|
|
|
|
extern TransactionId GetLatestCommitTsData(TimestampTz *ts,
|
|
|
|
CommitTsNodeId *nodeid);
|
|
|
|
|
|
|
|
extern Size CommitTsShmemBuffers(void);
|
|
|
|
extern Size CommitTsShmemSize(void);
|
|
|
|
extern void CommitTsShmemInit(void);
|
|
|
|
extern void BootStrapCommitTs(void);
|
|
|
|
extern void StartupCommitTs(void);
|
2015-03-09 21:44:00 +01:00
|
|
|
extern void ActivateCommitTs(void);
|
|
|
|
extern void DeactivateCommitTs(bool do_wal);
|
Keep track of transaction commit timestamps
Transactions can now set their commit timestamp directly as they commit,
or an external transaction commit timestamp can be fed from an outside
system using the new function TransactionTreeSetCommitTsData(). This
data is crash-safe, and truncated at Xid freeze point, same as pg_clog.
This module is disabled by default because it causes a performance hit,
but can be enabled in postgresql.conf requiring only a server restart.
A new test in src/test/modules is included.
Catalog version bumped due to the new subdirectory within PGDATA and a
couple of new SQL functions.
Authors: Álvaro Herrera and Petr Jelínek
Reviewed to varying degrees by Michael Paquier, Andres Freund, Robert
Haas, Amit Kapila, Fujii Masao, Jaime Casanova, Simon Riggs, Steven
Singer, Peter Eisentraut
2014-12-03 15:53:02 +01:00
|
|
|
extern void CompleteCommitTsInitialization(void);
|
|
|
|
extern void ShutdownCommitTs(void);
|
|
|
|
extern void CheckPointCommitTs(void);
|
|
|
|
extern void ExtendCommitTs(TransactionId newestXact);
|
2015-03-09 21:44:00 +01:00
|
|
|
extern void TruncateCommitTs(TransactionId oldestXact, bool do_wal);
|
Keep track of transaction commit timestamps
Transactions can now set their commit timestamp directly as they commit,
or an external transaction commit timestamp can be fed from an outside
system using the new function TransactionTreeSetCommitTsData(). This
data is crash-safe, and truncated at Xid freeze point, same as pg_clog.
This module is disabled by default because it causes a performance hit,
but can be enabled in postgresql.conf requiring only a server restart.
A new test in src/test/modules is included.
Catalog version bumped due to the new subdirectory within PGDATA and a
couple of new SQL functions.
Authors: Álvaro Herrera and Petr Jelínek
Reviewed to varying degrees by Michael Paquier, Andres Freund, Robert
Haas, Amit Kapila, Fujii Masao, Jaime Casanova, Simon Riggs, Steven
Singer, Peter Eisentraut
2014-12-03 15:53:02 +01:00
|
|
|
extern void SetCommitTsLimit(TransactionId oldestXact,
|
|
|
|
TransactionId newestXact);
|
|
|
|
extern void AdvanceOldestCommitTs(TransactionId oldestXact);
|
|
|
|
|
|
|
|
/* XLOG stuff */
|
|
|
|
#define COMMIT_TS_ZEROPAGE 0x00
|
|
|
|
#define COMMIT_TS_TRUNCATE 0x10
|
|
|
|
#define COMMIT_TS_SETTS 0x20
|
|
|
|
|
|
|
|
typedef struct xl_commit_ts_set
|
|
|
|
{
|
|
|
|
TimestampTz timestamp;
|
|
|
|
CommitTsNodeId nodeid;
|
|
|
|
TransactionId mainxid;
|
|
|
|
/* subxact Xids follow */
|
|
|
|
} xl_commit_ts_set;
|
|
|
|
|
|
|
|
#define SizeOfCommitTsSet (offsetof(xl_commit_ts_set, mainxid) + \
|
|
|
|
sizeof(TransactionId))
|
|
|
|
|
|
|
|
|
|
|
|
extern void commit_ts_redo(XLogReaderState *record);
|
|
|
|
extern void commit_ts_desc(StringInfo buf, XLogReaderState *record);
|
|
|
|
extern const char *commit_ts_identify(uint8 info);
|
|
|
|
|
|
|
|
#endif /* COMMITTS_H */
|