Re: WIP: parallel GiST index builds - Mailing list pgsql-hackers

From Andreas Karlsson
Subject Re: WIP: parallel GiST index builds
Date
Msg-id 6478355b-19b9-446a-8175-c8f4a551b50e@proxel.se
Whole thread Raw
In response to Re: WIP: parallel GiST index builds  ("Andrey M. Borodin" <x4mmm@yandex-team.ru>)
Responses Re: WIP: parallel GiST index builds
List pgsql-hackers
On 7/22/24 2:08 PM, Andrey M. Borodin wrote:
> During inserting tuples we need NSN on page. For NSN we can use just a counter, generated by gistGetFakeLSN() which
inturn will call GetFakeLSNForUnloggedRel(). Or any other shared counter.
 
> After inserting tuples we call log_newpage_range() to actually WAL-log pages.
> All NSNs used during build must be less than LSNs used to insert new tuples after index is built.

I feel the tricky part about doing that is that we need to make sure the 
fake LSNs are all less than the current real LSN when the index build 
completes and while that normally should be the case we will have a 
almost never exercised code path for when the fake LSN becomes bigger 
than the real LSN which may contain bugs. Is that really worth it to 
optimize.

But if we are going to use fake LSN: since the index being built is not 
visible to any scans we do not have to use GetFakeLSNForUnloggedRel() 
but could use an own counter in shared memory in the GISTShared struct 
for this specific index which starts at FirstNormalUnloggedLSN. This 
would give us slightly less contention plus decrease the risk (for good 
and bad) of the fake LSN being larger than the real LSN.

Andreas



pgsql-hackers by date:

Previous
From: Alexander Kuznetsov
Date:
Subject: Re: Possible null pointer dereference in afterTriggerAddEvent()
Next
From: Nisha Moond
Date:
Subject: Re: Conflict detection and logging in logical replication