Re: Re: GiST optimizing memmoves in gistplacetopage for fixed-size updates [PoC]

Поиск
Список
Период
Сортировка
От Anastasia Lubennikova
Тема Re: Re: GiST optimizing memmoves in gistplacetopage for fixed-size updates [PoC]
Дата
Msg-id a3ceb430-97ff-aa65-fade-a8daaa55fcc5@postgrespro.ru
обсуждение исходный текст
Ответ на Re: Re: GiST optimizing memmoves in gistplacetopage for fixed-size updates [PoC]  (Andrew Borodin <borodin@octonica.com>)
Ответы Re: Re: GiST optimizing memmoves in gistplacetopage for fixed-size updates [PoC]  (Andrew Borodin <borodin@octonica.com>)
Список pgsql-hackers
30.07.2016 14:00, Andrew Borodin:
> Here is BRIN-compatible version of patch. Now function
> PageIndexTupleOverwrite consumes tuple size as a parameter, this
> behavior is coherent with PageAddItem.
> Also, i had to remove asserstion that item has a storage in the loop
> that adjusts line pointers. It would be great if someone could check
> that place (commented Assert(ItemIdHasStorage(ii)); in
> PageIndexTupleOverwrite). I suspect that there might be a case when
> linp's should not be adjusted.

Hi, I reviewed the code and I have couple of questions about
following code:
    /* may have negative size here if new tuple is larger */    size_diff = oldsize - alignednewsize;    offset =
ItemIdGetOffset(tupid);
    if (offset < phdr->pd_upper || (offset + size_diff) > 
phdr->pd_special ||        offset != MAXALIGN(offset) || size_diff != MAXALIGN(size_diff))        ereport(ERROR,
       (errcode(ERRCODE_DATA_CORRUPTED),                 errmsg("corrupted item offset: offset = %u, size = %u",
               offset, (unsigned int) size_diff)));
 

First of all, shouldn't we use MAXALIGN(oldsize) instead of oldsize?
Although, I'm quite sure that it was already aligned somewhere before.

I doubt that the check (size_diff != MAXALIGN(size_diff)) is necessary.
I'd rather add  the check: (offset+size_diff < pd_lower).

Besides that moment, the patch seems pretty good.

BTW, I'm very surprised that it improves performance so much.
And also size is reduced significantly. 89MB against 289MB without patch.
Could you explain in details, why does it happen?

-- 
Anastasia Lubennikova
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company




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

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: Re: Column COMMENTs in CREATE TABLE?
Следующее
От: Jeff Janes
Дата:
Сообщение: Re: [RFC] Change the default of update_process_title to off