Re: index prefetching
От | Konstantin Knizhnik |
---|---|
Тема | Re: index prefetching |
Дата | |
Msg-id | 41b959cb-f483-413a-ba5e-f1ac4db0ef0b@garret.ru обсуждение исходный текст |
Ответ на | Re: index prefetching (Tomas Vondra <tomas.vondra@enterprisedb.com>) |
Ответы |
Re: index prefetching
|
Список | pgsql-hackers |
On 19/01/2024 2:35 pm, Tomas Vondra wrote: > > On 1/19/24 09:34, Konstantin Knizhnik wrote: >> On 18/01/2024 6:00 pm, Tomas Vondra wrote: >>> On 1/17/24 09:45, Konstantin Knizhnik wrote: >>>> I have integrated your prefetch patch in Neon and it actually works! >>>> Moreover, I combined it with prefetch of leaf pages for IOS and it also >>>> seems to work. >>>> >>> Cool! And do you think this is the right design/way to do this? >> I like the idea of prefetching TIDs in executor. >> >> But looking though your patch I have some questions: >> >> >> 1. Why it is necessary to allocate and store all_visible flag in data >> buffer. Why caller of IndexPrefetchNext can not look at prefetch field? >> >> + /* store the all_visible flag in the private part of the entry */ >> + entry->data = palloc(sizeof(bool)); >> + *(bool *) entry->data = all_visible; >> > What you mean by "prefetch field"? I mean "prefetch" field of IndexPrefetchEntry: + +typedef struct IndexPrefetchEntry +{ + ItemPointerData tid; + + /* should we prefetch heap page for this TID? */ + bool prefetch; + You store the same flag twice: + /* prefetch only if not all visible */ + entry->prefetch = !all_visible; + + /* store the all_visible flag in the private part of the entry */ + entry->data = palloc(sizeof(bool)); + *(bool *) entry->data = all_visible; My question was: why do we need to allocate something in entry->data and store all_visible in it, while we already stored !all-visible in entry->prefetch.
В списке pgsql-hackers по дате отправления: