BitmapHeapScan streaming read user and prelim refactoring

From: Melanie Plageman <melanieplageman(at)gmail(dot)com>
To: Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Cc: Andres Freund <andres(at)anarazel(dot)de>, Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, Nazir Bilal Yavuz <byavuz81(at)gmail(dot)com>
Subject: BitmapHeapScan streaming read user and prelim refactoring
Date: 2024-02-13 23:11:25
Message-ID: CAAKRu_ZwCwWFeL_H3ia26bP2e7HiKLWt0ZmGXPVwPO6uXq0vaA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

Attached is a patch set which refactors BitmapHeapScan such that it
can use the streaming read API [1]. It also resolves the long-standing
FIXME in the BitmapHeapScan code suggesting that the skip fetch
optimization should be pushed into the table AMs. Additionally, it
moves table scan initialization to after the index scan and bitmap
initialization.

patches 0001-0002 are assorted cleanup needed later in the set.
patches 0003 moves the table scan initialization to after bitmap creation
patch 0004 is, I think, a bug fix. see [2].
patches 0005-0006 push the skip fetch optimization into the table AMs
patches 0007-0009 change the control flow of BitmapHeapNext() to match
that required by the streaming read API
patch 0010 is the streaming read code not yet in master
patch 0011 is the actual bitmapheapscan streaming read user.

patches 0001-0009 apply on top of master but 0010 and 0011 must be
applied on top of a commit before a 21d9c3ee4ef74e2 (until a rebased
version of the streaming read API is on the mailing list).

The caveat is that these patches introduce breaking changes to two
table AM functions for bitmapheapscan: table_scan_bitmap_next_block()
and table_scan_bitmap_next_tuple().

A TBMIterateResult used to be threaded through both of these functions
and used in BitmapHeapNext(). This patch set removes all references to
TBMIterateResults from BitmapHeapNext. Because the streaming read API
requires the callback to specify the next block, BitmapHeapNext() can
no longer pass a TBMIterateResult to table_scan_bitmap_next_block().

More subtly, table_scan_bitmap_next_block() used to return false if
there were no more visible tuples on the page or if the block that was
requested was not valid. With these changes,
table_scan_bitmap_next_block() will only return false when the bitmap
has been exhausted and the scan can end. In order to use the streaming
read API, the user must be able to request the blocks it needs without
requiring synchronous feedback per block. Thus, this table AM function
must change its meaning.

I think the way the patches are split up could be improved. I will
think more about this. There are also probably a few mistakes with
which comments are updated in which patches in the set.

- Melanie

[1] https://www.postgresql.org/message-id/flat/CA%2BhUKGJkOiOCa%2Bmag4BF%2BzHo7qo%3Do9CFheB8%3Dg6uT5TUm2gkvA%40mail.gmail.com
[2] https://www.postgresql.org/message-id/CAAKRu_bxrXeZ2rCnY8LyeC2Ls88KpjWrQ%2BopUrXDRXdcfwFZGA%40mail.gmail.com

Attachment Content-Type Size
v1-0003-BitmapHeapScan-begin-scan-after-bitmap-setup.patch text/x-patch 5.8 KB
v1-0002-BitmapHeapScan-set-can_skip_fetch-later.patch text/x-patch 2.2 KB
v1-0001-Remove-table_scan_bitmap_next_tuple-parameter-tbm.patch text/x-patch 3.2 KB
v1-0005-Update-BitmapAdjustPrefetchIterator-parameter-typ.patch text/x-patch 2.3 KB
v1-0004-BitmapPrefetch-use-prefetch-block-recheck-for-ski.patch text/x-patch 1.6 KB
v1-0006-Push-BitmapHeapScan-skip-fetch-optimization-into-.patch text/x-patch 14.2 KB
v1-0008-Reduce-scope-of-BitmapHeapScan-tbmiterator-local-.patch text/x-patch 3.0 KB
v1-0009-Make-table_scan_bitmap_next_block-async-friendly.patch text/x-patch 17.7 KB
v1-0007-BitmapHeapScan-scan-desc-counts-lossy-and-exact-p.patch text/x-patch 3.8 KB
v1-0010-Streaming-Read-API.patch text/x-patch 56.0 KB
v1-0011-BitmapHeapScan-uses-streaming-read-API.patch text/x-patch 36.2 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Thomas Munro 2024-02-13 23:12:58 Re: Collation version tracking for macOS
Previous Message David E. Wheeler 2024-02-13 23:01:46 Re: Patch: Add parse_type Function