Nazir, Andres, thank you both for help! On Wed, Sep 13, 2023 at 10:10 PM Andres Freund <and...@anarazel.de> wrote:
> On 2023-09-13 16:04:00 +0300, Nazir Bilal Yavuz wrote: > > local_blks_read became zero because: > > 1_ One more cache hit. It was supposed to be local_blks_read but it is > > local_blks_hit now. This is an assumption, I didn't check this deeply. > > 2_ Before fcdda1e4b5, there was one local_blks_read coming from > > buf = ReadBufferExtended(rel, VISIBILITYMAP_FORKNUM, blkno, > > RBM_ZERO_ON_ERROR, NULL) in freespace.c -> ReadBuffer_common() -> > > pgBufferUsage.local_blks_read++. > > But buf = ReadBufferExtended(rel, VISIBILITYMAP_FORKNUM, blkno, > > RBM_ZERO_ON_ERROR, NULL) is moved into the else case, so it didn't > > called and local_blks_read isn't incremented. > > That imo is a legitimate difference / improvement. The read we previously > did > here was unnecessary. > > > > local_blks_written is greater because of the combination of fcdda1e4b5 > > and 00d1e02be2. > > In PG_15: > > RelationGetBufferForTuple() -> ReadBufferBI(P_NEW, RBM_ZERO_AND_LOCK) > > -> ReadBufferExtended() -> ReadBuffer_common() -> > > pgBufferUsage.local_blks_written++; (called 5 times) [0] > > In PG_16: > > 1_ 5 of the local_blks_written is coming from: > > RelationGetBufferForTuple() -> RelationAddBlocks() -> > > ExtendBufferedRelBy() -> ExtendBufferedRelCommon() -> > > ExtendBufferedRelLocal() -> pgBufferUsage.local_blks_written += > > extend_by; (extend_by is 1, this is called 5 times) [1] > > 2_ 3 of the local_blks_written is coming from: > > RelationGetBufferForTuple() -> RecordAndGetPageWithFreeSpace() -> > > fsm_set_and_search() -> fsm_readbuf() -> fsm_extend() -> > > ExtendBufferedRelTo() -> ExtendBufferedRelCommon() -> > > ExtendBufferedRelLocal() -> pgBufferUsage.local_blks_written += > > extend_by; (extend_by is 3, this is called 1 time) [2] > > > > I think [0] is the same path as [1] but [2] is new. 'fsm extends' > > wasn't counted in local_blks_written in PG_15. Calling > > ExtendBufferedRelTo() from fsm_extend() caused 'fsm extends' to be > > counted in local_blks_written. I am not sure which one is correct. > > I think it's correct to count the fsm writes here. The pg_stat_statement > columns aren't specific to the main relation for or such... If anything it > was > a bug to not count them before. > Best regards, Karina Litskevich Postgres Professional: http://postgrespro.com/