diff options
author | Andres Freund <andres@anarazel.de> | 2016-12-22 11:31:50 -0800 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2016-12-22 11:31:50 -0800 |
commit | 6ef2eba3f57f17960b7cd4958e18aa79e357de2f (patch) | |
tree | 99eb4b00aee1a41081f9b163923ee711b0567aa2 /src/backend/storage/ipc/standby.c | |
parent | 097e41439d69e11fb870e009b1ac64dda4f01c3d (diff) | |
download | postgresql-6ef2eba3f57f17960b7cd4958e18aa79e357de2f.tar.gz postgresql-6ef2eba3f57f17960b7cd4958e18aa79e357de2f.zip |
Skip checkpoints, archiving on idle systems.
Some background activity (like checkpoints, archive timeout, standby
snapshots) is not supposed to happen on an idle system. Unfortunately
so far it was not easy to determine when a system is idle, which
defeated some of the attempts to avoid redundant activity on an idle
system.
To make that easier, allow to make individual WAL insertions as not
being "important". By checking whether any important activity happened
since the last time an activity was performed, it now is easy to check
whether some action needs to be repeated.
Use the new facility for checkpoints, archive timeout and standby
snapshots.
The lack of a facility causes some issues in older releases, but in my
opinion the consequences (superflous checkpoints / archived segments)
aren't grave enough to warrant backpatching.
Author: Michael Paquier, editorialized by Andres Freund
Reviewed-By: Andres Freund, David Steele, Amit Kapila, Kyotaro HORIGUCHI
Bug: #13685
Discussion:
https://www.postgresql.org/message-id/20151016203031.3019.72930@wrigleys.postgresql.org
https://www.postgresql.org/message-id/CAB7nPqQcPqxEM3S735Bd2RzApNqSNJVietAC=6kfkYv_45dKwA@mail.gmail.com
Backpatch: -
Diffstat (limited to 'src/backend/storage/ipc/standby.c')
-rw-r--r-- | src/backend/storage/ipc/standby.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c index 875dcec1eba..112fe076775 100644 --- a/src/backend/storage/ipc/standby.c +++ b/src/backend/storage/ipc/standby.c @@ -961,10 +961,11 @@ LogStandbySnapshot(void) /* * Record an enhanced snapshot of running transactions into WAL. * - * The definitions of RunningTransactionsData and xl_xact_running_xacts - * are similar. We keep them separate because xl_xact_running_xacts - * is a contiguous chunk of memory and never exists fully until it is - * assembled in WAL. + * The definitions of RunningTransactionsData and xl_xact_running_xacts are + * similar. We keep them separate because xl_xact_running_xacts is a + * contiguous chunk of memory and never exists fully until it is assembled in + * WAL. The inserted records are marked as not being important for durability, + * to avoid triggering superflous checkpoint / archiving activity. */ static XLogRecPtr LogCurrentRunningXacts(RunningTransactions CurrRunningXacts) @@ -981,6 +982,7 @@ LogCurrentRunningXacts(RunningTransactions CurrRunningXacts) /* Header */ XLogBeginInsert(); + XLogSetRecordFlags(XLOG_MARK_UNIMPORTANT); XLogRegisterData((char *) (&xlrec), MinSizeOfXactRunningXacts); /* array of TransactionIds */ @@ -1035,6 +1037,7 @@ LogAccessExclusiveLocks(int nlocks, xl_standby_lock *locks) XLogBeginInsert(); XLogRegisterData((char *) &xlrec, offsetof(xl_standby_locks, locks)); XLogRegisterData((char *) locks, nlocks * sizeof(xl_standby_lock)); + XLogSetRecordFlags(XLOG_MARK_UNIMPORTANT); (void) XLogInsert(RM_STANDBY_ID, XLOG_STANDBY_LOCK); } |