Re: Minmax indexes

Поиск
Список
Период
Сортировка
От Simon Riggs
Тема Re: Minmax indexes
Дата
Msg-id CA+U5nM+e4oSSxszjQun3Rd2imDLpvOWDxZ1zjsyK33RVSWSXgQ@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Minmax indexes  (Heikki Linnakangas <hlinnakangas@vmware.com>)
Список pgsql-hackers
On 8 August 2014 10:01, Heikki Linnakangas <hlinnakangas@vmware.com> wrote:

> It's possible that two backends arrive at phase 3 at the same time, with
> different values. For example, backend A wants to update the minimum to
> contain 10, and and backend B wants to update it to 5. Now, if backend B
> gets to update the tuple first, to 5, backend A will update the tuple to 10
> when it gets the lock, which is wrong.
>
> The simplest solution would be to get the buffer lock in exclusive mode to
> begin with, so that you don't need to release it between steps 2 and 5. That
> might be a significant hit on concurrency, though, when most of the
> insertions don't in fact have to update the value. Another idea is to
> re-check the updated values after acquiring the lock in exclusive mode, to
> see if they match the previous values.

Simplest solution is to re-apply the test just before update, so in
the above example, if we think we want to lower the minimum to 10 and
when we get there it is already 5, we just don't update.

We don't need to do the re-check always, though. We can read the page
LSN while holding share lock, then re-read it once we acquire
exclusive lock. If LSN is the same, no need for datatype specific
re-checks at all.

-- Simon Riggs                   http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training & Services



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

Предыдущее
От: Fabien COELHO
Дата:
Сообщение: Re: parametric block size?
Следующее
От: Simon Riggs
Дата:
Сообщение: Re: Minmax indexes