Re: HASH INDEX builds seems confused

From: Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>
To: John Naylor <johncnaylorls(at)gmail(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: HASH INDEX builds seems confused
Date: 2025-11-11 11:08:13
Message-ID: CAA4eK1Jb9mxYfV2eThEkAv1r0bvR+Sd8Z7e15AfbC1hFWn3W0g@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, Nov 11, 2025 at 11:27 AM John Naylor <johncnaylorls(at)gmail(dot)com> wrote:
>
> hashbuild() says:
>
> * If we just insert the tuples into the index in scan order, then
> * (assuming their hash codes are pretty random) there will be no locality
> * of access to the index, and if the index is bigger than available RAM
> * then we'll thrash horribly. To prevent that scenario, we can sort the
> * tuples by (expected) bucket number. However, such a sort is useless
> * overhead when the index does fit in RAM. We choose to sort if the
> * initial index size exceeds maintenance_work_mem, or the number of
> * buffers usable for the index, whichever is less. (Limiting by the
>
> However, since commit e09d7a126 it's harder to believe sorts are ever
> useless, since we then decided that sorts should have a more strict
> sort order for the sake of sequential access. Further, d09dbeb9b built
> upon that to remove wasteful binary search when inserting into the
> page. Looking at some of the numbers in the linked threads, I wonder
> if all test environments were actually hitting the sort path at all,
> since you'd have to exceed m_w_m or s_b to take advantage. Unless I'm
> missing something, it seems like we should just sort unconditionally.
> That would be a nice simplification, and might speed up index builds
> even when there's plenty of memory. (If I am in fact missing
> something, maybe comments need updating)
>

+1. It seems worth pursuing this. We can establish the benefits by
taking some performance data.

> Now that I'm looking, I'm also wondering how hard it would be to have
> datum1 contain both the bucket (high bits) and hash (lower bits),
> since we can now count on Datums being 8 bytes on all platforms. It
> might be harder in turn to hack things so that the appropriate sort
> specialization could be applied (it'd need a fake sortKey at least),
> but that would be a possible future project.
>

Yeah that also sounds worth exploring but what benefit are you
expecting out of it?

--
With Regards,
Amit Kapila.

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Hayato Kuroda (Fujitsu) 2025-11-11 11:09:33 RE: Parallel Apply
Previous Message wenhui qiu 2025-11-11 10:40:04 Re: Report oldest xmin source when autovacuum cannot remove tuples