diff options
| author | Simon Riggs | 2016-04-04 06:18:05 +0000 |
|---|---|---|
| committer | Simon Riggs | 2016-04-04 06:18:05 +0000 |
| commit | bf08f2292ffca14fd133aa0901d1563b6ecd6894 (patch) | |
| tree | 9e46fa1107681915c8a764f3e7f68e0aaf177871 /src/backend/storage/ipc | |
| parent | a75a418d07bf852dc9fdb85ccfb39c763aa057a9 (diff) | |
Avoid archiving XLOG_RUNNING_XACTS on idle server
If archive_timeout > 0 we should avoid logging XLOG_RUNNING_XACTS if idle.
Bug 13685 reported by Laurence Rowe, investigated in detail by Michael Paquier,
though this is not his proposed fix.
[email protected]
Simple non-invasive patch to allow later backpatch to 9.4 and 9.5
Diffstat (limited to 'src/backend/storage/ipc')
| -rw-r--r-- | src/backend/storage/ipc/standby.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c index 6a9bf842d39..8b9b438ca92 100644 --- a/src/backend/storage/ipc/standby.c +++ b/src/backend/storage/ipc/standby.c @@ -902,6 +902,7 @@ LogStandbySnapshot(void) RunningTransactions running; xl_standby_lock *locks; int nlocks; + static bool last_snapshot_overflowed = false; Assert(XLogStandbyInfoActive()); @@ -932,8 +933,28 @@ LogStandbySnapshot(void) * only a shared lock. */ if (wal_level < WAL_LEVEL_LOGICAL) + { LWLockRelease(ProcArrayLock); + /* + * Don't bother to log anything if nothing is happening, if we are + * using archive_timeout > 0 and we didn't overflow snapshot last time. + * + * This ensures that we don't issue an empty WAL record, which can + * be annoying when used in conjunction with archive timeout. + */ + if (running->xcnt == 0 && + nlocks == 0 && + XLogArchiveTimeout > 0 && + !last_snapshot_overflowed) + { + LWLockRelease(XidGenLock); + return InvalidXLogRecPtr; + } + + last_snapshot_overflowed = running->subxid_overflow; + } + recptr = LogCurrentRunningXacts(running); /* Release lock if we kept it longer ... */ |
