| 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.
| 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 |