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

Reply via email to