From: | James Hunter <james(dot)hunter(dot)pg(at)gmail(dot)com> |
---|---|
To: | Thomas Munro <thomas(dot)munro(at)gmail(dot)com> |
Cc: | Melanie Plageman <melanieplageman(at)gmail(dot)com>, Tomas Vondra <tomas(at)vondra(dot)me>, Nazir Bilal Yavuz <byavuz81(at)gmail(dot)com>, Dilip Kumar <dilipbalaut(at)gmail(dot)com>, Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, Andres Freund <andres(at)anarazel(dot)de>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: BitmapHeapScan streaming read user and prelim refactoring |
Date: | 2025-04-09 01:46:31 |
Message-ID: | CAJVSvF5K5U8U5o=Zt6qBJaH7M9EhGE-FD_USnAnns2U2Cyc3QQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Mon, Apr 7, 2025 at 7:34 PM Thomas Munro <thomas(dot)munro(at)gmail(dot)com> wrote:
>
> On Thu, Feb 13, 2025 at 1:40 PM Melanie Plageman
> <melanieplageman(at)gmail(dot)com> wrote:
> > Thomas mentioned this to me off-list, and I think he's right. We
> > likely need to rethink the way parallel bitmap heap scan workers get
> > block assignments for reading and prefetching to make it more similar
> > to parallel sequential scan. The workers should probably get
> > assignments of a range of blocks. On master, each worker does end up
> > issuing reads/fadvises for a bunch of blocks in a row -- even though
> > that isn't the intent of the parallel bitmap table scan
> > implementation. We are losing some of that with the patch -- but only
> > because it is behaving as you would expect given the implementation
> > and design. I don't consider that a blocker, though.
>
> I had a crack at this one a few weeks back, and wanted to share some
> thoughts.
Fwiw, I've had reasonably good results, in a similar situation, by
just batching + double-buffering.
Since you're using AIO (as Melanie points out) there should be no real
penalty to having a single worker request the next batch of blocks,
when the current block is used up.
Then you can separate "reading" from "prefetching": whoever reads the
last block in the current batch, prefetches the next batch.
This way, you could preserve your existing "reading" logic, and you
wouldn't need to create several new, related queues.
James
From | Date | Subject | |
---|---|---|---|
Next Message | Richard Guo | 2025-04-09 02:05:00 | Re: Some problems regarding the self-join elimination code |
Previous Message | vignesh C | 2025-04-09 01:03:36 | Re: Commit fest 2025-03 |