Re: WIP: parallel GiST index builds

Поиск
Список
Период
Сортировка
От Andreas Karlsson
Тема Re: WIP: parallel GiST index builds
Дата
Msg-id 6478355b-19b9-446a-8175-c8f4a551b50e@proxel.se
обсуждение исходный текст
Ответ на Re: WIP: parallel GiST index builds  ("Andrey M. Borodin" <x4mmm@yandex-team.ru>)
Ответы Re: WIP: parallel GiST index builds
Список 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 по дате отправления:

Предыдущее
От: Alexander Kuznetsov
Дата:
Сообщение: Re: Possible null pointer dereference in afterTriggerAddEvent()
Следующее
От: Nisha Moond
Дата:
Сообщение: Re: Conflict detection and logging in logical replication