Re: BitmapHeapScan streaming read user and prelim refactoring

From: Melanie Plageman <melanieplageman(at)gmail(dot)com>
To: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>
Cc: Dilip Kumar <dilipbalaut(at)gmail(dot)com>, Robert Haas <robertmhaas(at)gmail(dot)com>, Nazir Bilal Yavuz <byavuz81(at)gmail(dot)com>, Andres Freund <andres(at)anarazel(dot)de>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org>, Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, Tomas Vondra <tomas(dot)vondra(at)enterprisedb(dot)com>
Subject: Re: BitmapHeapScan streaming read user and prelim refactoring
Date: 2024-03-14 18:16:25
Message-ID: 20240314181625.a7uigo5ujaogfd6x@liskov
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Mar 14, 2024 at 03:32:04PM +0200, Heikki Linnakangas wrote:
> On 14/03/2024 12:55, Dilip Kumar wrote:
> > On Thu, Mar 14, 2024 at 4:07 PM Heikki Linnakangas <hlinnaka(at)iki(dot)fi> wrote:
> > > _SPI_execute_plan() has code to deal with the possibility that the
> > > active snapshot is not set. That seems fishy; do we really support SPI
> > > without any snapshot? I'm inclined to turn that into an error. I ran the
> > > regression tests with an "Assert(ActiveSnapshotSet())" there, and
> > > everything worked.
> >
> > IMHO, we can call SPI_Connect() and SPI_Execute() from any C
> > extension, so I don't think there we can guarantee that the snapshot
> > must be set, do we?
>
> I suppose, although the things you could do without a snapshot would be
> pretty limited. The query couldn't access any tables. Could it even look up
> functions in the parser? Not sure.
>
> > Maybe for now we can just handle this specific case to remove the
> > snapshot serializing for the BitmapHeapScan as you are doing in the
> > patch. After looking into the code your theory seems correct that we
> > are just copying the ActiveSnapshot while building the query
> > descriptor and from there we are copying into the Estate so logically
> > there should not be any reason for these two to be different.
>
> Ok, committed that for now. Thanks for looking!

Attached v6 is rebased over your new commit. It also has the "fix" in
0010 which moves BitmapAdjustPrefetchIterator() back above
table_scan_bitmap_next_block(). I've also updated the Streaming Read API
commit (0013) to Thomas' v7 version from [1]. This has the update that
we theorize should address some of the regressions in the bitmapheapscan
streaming read user in 0014.

- Melanie

[1] https://www.postgresql.org/message-id/CA%2BhUKGLJi%2Bc5jB3j6UvkgMYHky-qu%2BLPCsiNahUGSa5Z4DvyVA%40mail.gmail.com

Attachment Content-Type Size
v6-0001-BitmapHeapScan-begin-scan-after-bitmap-creation.patch text/x-diff 2.8 KB
v6-0002-BitmapHeapScan-set-can_skip_fetch-later.patch text/x-diff 2.2 KB
v6-0003-Push-BitmapHeapScan-skip-fetch-optimization-into-.patch text/x-diff 14.9 KB
v6-0004-BitmapPrefetch-use-prefetch-block-recheck-for-ski.patch text/x-diff 2.2 KB
v6-0005-Update-BitmapAdjustPrefetchIterator-parameter-typ.patch text/x-diff 2.3 KB
v6-0006-EXPLAIN-Bitmap-table-scan-also-count-no-visible-t.patch text/x-diff 3.0 KB
v6-0007-table_scan_bitmap_next_block-returns-lossy-or-exa.patch text/x-diff 4.4 KB
v6-0008-Reduce-scope-of-BitmapHeapScan-tbmiterator-local-.patch text/x-diff 2.9 KB
v6-0009-Remove-table_scan_bitmap_next_tuple-parameter-tbm.patch text/x-diff 4.1 KB
v6-0010-Make-table_scan_bitmap_next_block-async-friendly.patch text/x-diff 22.9 KB
v6-0011-Hard-code-TBMIterateResult-offsets-array-size.patch text/x-diff 5.3 KB
v6-0012-Separate-TBM-Shared-Iterator-and-TBMIterateResult.patch text/x-diff 19.7 KB
v6-0013-v7-Streaming-Read-API.patch text/x-diff 56.1 KB
v6-0014-BitmapHeapScan-uses-streaming-read-API.patch text/x-diff 28.5 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2024-03-14 18:20:33 Re: broken JIT support on Fedora 40
Previous Message Jeff Davis 2024-03-14 18:07:00 Re: Pre-proposal: unicode normalized text