On Tue, Dec 6, 2022 at 7:32 PM John Naylor <john.nay...@enterprisedb.com> wrote:
>
> On Fri, Dec 2, 2022 at 11:42 PM Masahiko Sawada <sawada.m...@gmail.com> wrote:
> >
> > > On Mon, Nov 14, 2022 at 7:59 PM John Naylor 
> > > <john.nay...@enterprisedb.com> wrote:
> > > >
> > > > - Optimize node128 insert.
> > >
> > > I've attached a rough start at this. The basic idea is borrowed from our 
> > > bitmapset nodes, so we can iterate over and operate on word-sized (32- or 
> > > 64-bit) types at a time, rather than bytes.
> >
> > Thanks! I think this is a good idea.
> >
> > > To make this easier, I've moved some of the lower-level macros and types 
> > > from bitmapset.h/.c to pg_bitutils.h. That's probably going to need a 
> > > separate email thread to resolve the coding style clash this causes, so 
> > > that can be put off for later.
>
> I started a separate thread [1], and 0002 comes from feedback on that. There 
> is a FIXME about using WORDNUM and BITNUM, at least with that spelling. I'm 
> putting that off to ease rebasing the rest as v13 -- getting some CI testing 
> with 0002 seems like a good idea. There are no other changes yet. Next, I 
> will take a look at templating local vs. shared memory. I might try basing 
> that on the styles of both v12 and v8, and see which one works best with 
> templating.

Thank you so much!

In the meanwhile, I've been working on vacuum integration. There are
two things I'd like to discuss some time:

The first is the minimum of maintenance_work_mem, 1 MB. Since the
initial DSA segment size is 1MB (DSA_INITIAL_SEGMENT_SIZE), parallel
vacuum with radix tree cannot work with the minimum
maintenance_work_mem. It will need to increase it to 4MB or so. Maybe
we can start a new thread for that.

The second is how to limit the size of the radix tree to
maintenance_work_mem. I think that it's tricky to estimate the maximum
number of keys in the radix tree that fit in maintenance_work_mem. The
radix tree size varies depending on the key distribution. The next
idea I considered was how to limit the size when inserting a key. In
order to strictly limit the radix tree size, probably we have to
change the rt_set so that it breaks off and returns false if the radix
tree size is about to exceed the memory limit when we allocate a new
node or grow a node kind/class. Ideally, I'd like to control the size
outside of radix tree (e.g. TIDStore) since it could introduce
overhead to rt_set() but probably we need to add such logic in radix
tree.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com


Reply via email to