pgsql: Teach radix tree to embed values at runtime

From: John Naylor <john(dot)naylor(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Teach radix tree to embed values at runtime
Date: 2024-04-08 11:57:01
Message-ID: E1rtncS-0017fQ-Jd@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Teach radix tree to embed values at runtime

Previously, the decision to store values in leaves or within the child
pointer was made at compile time, with variable length values using
leaves by necessity. This commit allows introspecting the length of
variable length values at runtime for that decision. This requires
the ability to tell whether the last-level child pointer is actually
a value, so we use a pointer tag in the lowest level bit.

Use this in TID store. This entails adding a byte to the header to
reserve space for the tag. Commit f35bd9bf3 stores up to three offsets
within the header with no bitmap, and now the header can be embedded
as above. This reduces worst-case memory usage when TIDs are sparse.

Reviewed (in an earlier version) by Masahiko Sawada

Discussion: https://postgr.es/m/CANWCAZYw+_KAaUNruhJfE=h6WgtBKeDG32St8vBJBEY82bGVRQ@mail.gmail.com
Discussion: https://postgr.es/m/CAD21AoBci3Hujzijubomo1tdwH3XtQ9F89cTNQ4bsQijOmqnEw@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/0fe5f64367bc2fc70baa1f0f993638830f8aa6a5

Modified Files
--------------
src/backend/access/common/tidstore.c | 81 +++++++++++++++++++++++++-----------
src/include/lib/radixtree.h | 32 ++++++++++++++
2 files changed, 89 insertions(+), 24 deletions(-)

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Jelte Fennema-Nio 2024-04-08 15:14:52 Re: pgsql: Transform OR clauses to ANY expression
Previous Message John Naylor 2024-04-08 11:48:28 pgsql: Teach TID store to skip bitmap for small numbers of offsets