Re: Add pg_buffercache_evict_all() and pg_buffercache_mark_dirty[_all]() functions

From: Andres Freund <andres(at)anarazel(dot)de>
To: Nazir Bilal Yavuz <byavuz81(at)gmail(dot)com>
Cc: Aidar Imamov <a(dot)imamov(at)postgrespro(dot)ru>, Joseph Koshakow <koshy44(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Add pg_buffercache_evict_all() and pg_buffercache_mark_dirty[_all]() functions
Date: 2025-04-08 06:40:52
Message-ID: lbnhztfm6dphofz3o3gxgtastqlnwztb6gz4cmvjqpcchmwapf@bar5wopwdbgz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

On 2025-04-08 03:15:57 +0300, Nazir Bilal Yavuz wrote:
> On Tue, 8 Apr 2025 at 02:29, Andres Freund <andres(at)anarazel(dot)de> wrote:
> > On 2025-04-07 19:37:50 +0300, Nazir Bilal Yavuz wrote:
> > > > > > > + relation_close(rel, AccessExclusiveLock);
> > > > > >
> > > > > > Hm. Why are we dropping the lock here early? It's probably ok, but it's not
> > > > > > clear to me why we should do so.
> > > > >
> > > > > We are dropping the lock after we processed the relation. I didn't
> > > > > understand what could be the problem here. Why do you think it is
> > > > > early?
> > > >
> > > > Most commonly we close relations without releasing the lock, instead relying
> > > > on the lock being released at the end of the transaction.
> > >
> > > I see. I was looking at pg_prewarm as an example and copied it from there.
> >
> > I don't think we're particularly consistent about it. And I think there's some
> > differing views about what precisely the right behaviour is...
> >
> >
> > I've tried to polish the patch. Changes I made:
> >
> > - The number of processed buffers for EvictAllUnpinnedBuffers() was alwasy
> > NBuffers, that didn't seem right. But that's obsoleted by the next point:
> >
> > - I think it'd be more useful to return the number of skipped buffers,
> > i.e. buffers that could not be evicted, than the number of processed
> > buffers.
>
> I agree. The number of buffers that we tried to evict but couldn't
> evict will give more information rather than NBuffers.

Cool.

> >
> > I'm not_evicted or such would also work.
>
> Did you mean that 'not_evicted' can be used instead of
> 'skipped_buffers' as a column name? If that is the case, both are okay
> to me.

Correct, sorry for that garbled sentence.

> > - I don't love the buffers_ prefix for the column names / C function
> > arguments. Seems long. It seems particularly weird because
> > pg_buffercache_evict() doesn't have a buffer_ prefix.
> >
> > I left it as-is, but I think something perhaps ought to change before
> > commit.
>
> Both are okay to me, I still couldn't decide which I like more.

I went back and forth at least three times. In the end I added the buffer_
(singular) prefix for pg_buffercache_evict().

> > - The documentation format of the functions isn't quite what we usually do (a
> > table documenting the columns returned by a function with multiple columns),
> > but otoh, these are really developer oriented functions, so spending 30
> > lines of a <table> on each of these functions feels a bit silly.
> >
> > I'd be ok with it as-is.
> >
> > - The docs for pg_buffercache_evict() don't quite sound right to me, there's
> > some oddity in the phrasing. Nothing too bad, but perhaps worht a small bit
> > of additional polish.
>
> I tried to update it without changing the old doc, perhaps that was
> the wrong move.

I think it's ok for now. It might be worth doing a larger redesign of the
pgbuffercache docs at some point...

Pushed.

Thanks for your patches and thanks for all the reviewers getting this ready!

Greetings,

Andres Freund

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Bertrand Drouvot 2025-04-08 06:42:53 Re: Fix 035_standby_logical_decoding.pl race conditions
Previous Message Richard Guo 2025-04-08 06:32:00 Re: An incorrect check in get_memoize_path