Re: EXPLAIN: showing ReadStream / prefetch stats

Melanie Plageman <melanieplageman@gmail.com>

From: Melanie Plageman <melanieplageman@gmail.com>
To: Tomas Vondra <tomas@vondra.me>
Cc: Lukas Fittl <lukas@fittl.com>, Andres Freund <andres@anarazel.de>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2026-04-07T19:42:39Z
Lists: pgsql-hackers
On Tue, Apr 7, 2026 at 1:34 PM Tomas Vondra <tomas@vondra.me> wrote:
>
> On 4/7/26 18:07, Melanie Plageman wrote:
>
> > I see I had bitmapheapscan use
> >     if (!node->ss.ps.instrument || pcxt->nworkers == 0)
> >         return;
> >
> > while seq scan uses
> >     if (!estate->es_instrument || pcxt->nworkers == 0)
> >         return;
> >
> > That does seem worth being consistent about. Though the estate one is
> > probably better to use and changing bitmapheapscan in this commit
> > might be noisy... I don't feel strongly either way.
>
> I'm not sure this is just a question of consistency, because BHS may
> need the shared instrumentation even if (es_instrument = 0), no? While
> the seqscan/tidrange scan only need it with EXPLAIN(IO).
>
> So I think the two nodes should check
>
>   ((estate->es_instrument & INSTRUMENT_IO) == 0)

Makes sense to me.

I skimmed v14 quite quickly and LGTM.

- Melanie



Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. bufmgr: Return whether WaitReadBuffers() needed to wait