Re: Relation extension scalability

Поиск
Список
Период
Сортировка
От Petr Jelinek
Тема Re: Relation extension scalability
Дата
Msg-id 56F2E5E8.6050406@2ndquadrant.com
обсуждение исходный текст
Ответ на Re: Relation extension scalability  (Robert Haas <robertmhaas@gmail.com>)
Ответы Re: Relation extension scalability  (Robert Haas <robertmhaas@gmail.com>)
Список pgsql-hackers
On 23/03/16 19:39, Robert Haas wrote:
> On Tue, Mar 22, 2016 at 1:12 PM, Petr Jelinek <petr@2ndquadrant.com> wrote:
>> I also think the code simplicity makes this worth it.
>
> Agreed.  I went over this patch and did a cleanup pass today.   I
> discovered that the LockWaiterCount() function was broken if you try
> to tried to use it on a lock that you didn't hold or a lock that you
> held in any mode other than exclusive, so I tried to fix that.  I
> rewrote a lot of the comments and tightened some other things up.  The
> result is attached.
>
> I'm baffled by the same code Amit asked about upthread, even though
> there's now a comment:
>
> +                               /*
> +                                * Here we are calling
> RecordAndGetPageWithFreeSpace
> +                                * instead of GetPageWithFreeSpace,
> because other backend
> +                                * who have got the lock might have
> added extra blocks in
> +                                * the FSM and its possible that FSM
> tree might not have
> +                                * been updated so far and we will not
> get the page by
> +                                * searching from top using
> GetPageWithFreeSpace, so we
> +                                * need to search the leaf page
> directly using our last
> +                                * valid target block.
> +                                *
> +                                * XXX. I don't understand what is
> happening here. -RMH
> +                                */
>
> I've read this over several times and looked at
> RecordAndGetPageWithFreeSpace() and I'm still confused.  First of all,
> if the lock was acquired by some other backend which did
> RelationAddExtraBlocks(), it *will* have updated the FSM - that's the
> whole point.

That's good point, maybe this coding is bit too defensive.

> Second, if the other backend extended the relation in
> some other manner and did not extend the FSM, how does calling
> RecordAndGetPageWithFreeSpace help?  As far as I can see,
> GetPageWithFreeSpace and RecordAndGetPageWithFreeSpace are both just
> searching the FSM, so if one is stymied the other will be too.  What
> am I missing?
>

The RecordAndGetPageWithFreeSpace will extend FSM as it calls 
fsm_set_and_search which in turn calls fsm_readbuf with extend = true.

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



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

Предыдущее
От: Merlin Moncure
Дата:
Сообщение: Re: PostgreSQL 9.6 behavior change with set returning (funct).*
Следующее
От: Robert Haas
Дата:
Сообщение: Re: Relation extension scalability