postgrespro.git / summary / log / commit / refs

commit    0dd6ff0ac8482f753405c5bdb091d2a8adc58e75
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Mon Feb 18 00:52:02 2019 +0000

    Avoid some unnecessary block reads in WAL reader
    
    When reading a new page internally and depending on the way the WAL
    reader facility gets used by plugins, the current implementation of the
    WAL reader may finish by reading a block multiple times while it is not
    actually necessary as the requested data length may be equal to what has
    been already read.  This can happen for any size, but is more likely to
    happen at the end of a page.  This can cause performance penalties in
    plugins which rely on the block reads to be purely sequential, zlib not
    liking backward reads for example.  The new behavior also shaves some
    cycles when doing recovery.
    
    Author: Arthur Zakirov
    Reviewed-by: Andrey Lepikhov, Michael Paquier, Grigory Smolkin
    Discussion: https://postgr.es/m/2ddf4a32-517e-d6f4-d992-4a63b6035bfd@postgrespro.ru


src/backend/access/transam/xlogreader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index 69b6226f8f..cbc7e4e7ea 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -536,7 +536,7 @@ ReadPageInternal(XLogReaderState *state, XLogRecPtr pageptr, int reqLen) /* check whether we have all the requested data already */ if (targetSegNo == state->readSegNo && targetPageOff == state->readOff && - reqLen < state->readLen) + reqLen <= state->readLen) return state->readLen; /* [parent: 0b55aaacec31]