Re: GiST VACUUM

Поиск
Список
Период
Сортировка
От Andrey Borodin
Тема Re: GiST VACUUM
Дата
Msg-id ADA3A0B7-A209-48E5-8942-BA913C3FD31D@yandex-team.ru
обсуждение исходный текст
Ответ на Re: GiST VACUUM  (Heikki Linnakangas <hlinnaka@iki.fi>)
Ответы Re: GiST VACUUM  (Heikki Linnakangas <hlinnaka@iki.fi>)
Список pgsql-hackers
Hi!

> 18 июля 2018 г., в 16:02, Heikki Linnakangas <hlinnaka@iki.fi> написал(а):
>
> In the corresponding B-tree code, we use don't do actual recursion, but a hand-optimized "tail recursion", to avoid
stackoverflow if there are a lot of splits. I think we need to do something like tha there, too. I don't think it's
safeto assume that we have enough stack space for the recursion. You have a check_stack_depth() in the function, so
you'llget ERROR, but it sucks if VACUUM errors out because of that. 
Ok, will do that.

>
>
> It's not cool to use up to 'maintenance_work_mem' of memory for holding the in-memory graph. VACUUM already uses up
tothat much memory to hold the list of dead TIDs, so we would use up to 2x maintenance_work_mem in total. 
>
> The only reason we still need the logical scan is to support page deletion, when there is not enough memory
available.Can we get rid of that altogether? I think I'd prefer some other scheme to deal with that situation. For
example,we could make note, in memory, of the empty pages during the physical scan, and perform a second physical scan
ofthe index to find their downlinks. Two full-index scans is not nice, but it's actually not that bad if it's done in
physicalorder. 
I think this is a good idea. I will implement this.

> And you could have some heuristics, e.g. only do it if more than 10% of the pages were deletable.
>
> Sorry to ask you to rewrite this again
Piece of cake :)

> , but I think it would be better to split this into two patches as follows:
>
> 1st patch: Scan the index in physical rather than logical order. No attempt at deleting empty pages yet.
>
> 2nd patch: Add support for deleting empty pages.
>
> I would be more comfortable reviewing and committing that first patch, which just switches to doing physical-order
scan,first. 

This seems very unproportional division of complexity. First patch (PFA) is very simple. All work is done in one cycle,
withoutmemorizing anything. Actually, you do not even need to rescan rightlinks: there may be no splits to the left
whenno pages are deleted. 
If you think it is proper way to go - OK, I'll prepare better version of attached diff (by omitting tail recursion and
addingmore comments). 


Best regards, Andrey Borodin.

Вложения

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: ENOSPC FailedAssertion("!(RefCountErrors == 0)"
Следующее
От: Alvaro Herrera
Дата:
Сообщение: Re: Possible bug in logical replication.