On 2016-01-28 16:40:13 +0900, Michael Paquier wrote: > OK, so as a first step and after thinking about the whole for a while, > I have finished with the patch attached. This patch is aimed at > avoiding unnecessary checkpoints on idle systems when wal_level >= > hot_standby by centralizing the check to look at if there has some WAL > activity since the last checkpoint.
That's not what I suggested. > /* > + * XLOGHasActivity -- Check if XLOG had some significant activity or > + * if it is idle lately. This is primarily used to check if there has > + * been some WAL activity since the last checkpoint that occurred on > + * system to control the generaton of XLOG record related to standbys. > + */ > +bool > +XLOGHasActivity(void) > +{ > + XLogCtlInsert *Insert = &XLogCtl->Insert; > + XLogRecPtr redo_lsn = ControlFile->checkPointCopy.redo; > + uint64 prev_bytepos; > + > + /* Check if any activity has happened since last checkpoint */ > + SpinLockAcquire(&Insert->insertpos_lck); > + prev_bytepos = Insert->PrevBytePos; > + SpinLockRelease(&Insert->insertpos_lck); > + > + return XLogBytePosToRecPtr(prev_bytepos) == redo_lsn; > +} > How should this actually should work reliably, given we *want* to have included a standby snapshot after the last checkpoint? In CreateCheckPoint() we have /* * Here we update the shared RedoRecPtr for future XLogInsert calls; this * must be done while holding all the insertion locks. * RedoRecPtr = XLogCtl->Insert.RedoRecPtr = checkPoint.redo; computing the next redo rec ptr and then if (!shutdown && XLogStandbyInfoActive()) LogStandbySnapshot(); before the final XLogRegisterData((char *) (&checkPoint), sizeof(checkPoint)); recptr = XLogInsert(RM_XLOG_ID, shutdown ? XLOG_CHECKPOINT_SHUTDOWN : XLOG_CHECKPOINT_ONLINE); so the above condition doesn't really something we want to rely on. Am I missing what you're trying to do? Greetings, Andres Freund -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers