Re: Performance degradation of REFRESH MATERIALIZED VIEW

Поиск
Список
Период
Сортировка
От Tomas Vondra
Тема Re: Performance degradation of REFRESH MATERIALIZED VIEW
Дата
Msg-id b9164b81-0776-7590-293a-69908fa1eee4@enterprisedb.com
обсуждение исходный текст
Ответ на Re: Performance degradation of REFRESH MATERIALIZED VIEW  (Tomas Vondra <tomas.vondra@enterprisedb.com>)
Список pgsql-hackers
On 5/11/21 7:35 PM, Tomas Vondra wrote:
> 
> 
> On 5/11/21 7:25 PM, Andres Freund wrote:
>> Hi,
>>
>> On 2021-05-11 16:07:44 +0200, Tomas Vondra wrote:
>>> On 5/11/21 11:04 AM, Masahiko Sawada wrote:
>>>> I think the changes for heap_multi_insert() are fine so we can revert
>>>> only heap_insert() part if we revert something from the v14 tree,
>>>> although we will end up not inserting frozen tuples into toast tables.
>>>>
>>>
>>> I'd be somewhat unhappy about reverting just this bit, because it'd mean
>>> that we freeze rows in the main table but not rows in the TOAST 
>>> tables (that
>>> was kinda why we concluded we need the heap_insert part too).
>>
>> Is there a reason not to apply a polished version of my proposal? And
>> then to look at the remaining difference?
>>
> 
> Probably not, I was just a little bit confused what exactly is going on, 
> unsure what to do about it. But if RMV freezes the rows, that probably 
> explains it and your patch is the way to go.
> 
>>
>>> I'm still a bit puzzled where does the extra overhead (in cases when 
>>> freeze
>>> is not requested) come from, TBH. Intuitively, I'd hope there's a way to
>>> eliminate that entirely, and only pay the cost when requested (with the
>>> expectation that it's cheaper than freezing it that later).
>>
>> I'd like to see a profile comparison between those two cases. Best with
>> both profiles done in master, just once with the freeze path disabled...
>>
> 
> OK. I'm mostly afk at the moment, I'll do that once I get back home, 
> sometime over the weekend / maybe early next week.
> 

OK, so here are the flamegraphs, for all three cases - current master, 
0c7d3bb99 (i.e. before heap_insert changes) and with the pinning patch 
applied. I did this using the same test case as before (50M table), but 
with -fno-omit-frame-pointer to get better profiles. It may add some 
overhead, but hopefully that applies to all cases equally.

The first 10 runs for each case look like this:

     old    master  patched
     ----------------------
     55045   74284    58246
     53927   74283    57273
     54090   74114    57336
     54194   74059    57223
     54189   74186    57287
     54090   74113    57278
     54095   74036    57176
     53896   74215    57303
     54101   74060    57524
     54062   74021    57278
     ----------------------
     54168   74137    57392
             1.36x    1.05x

which is mostly in line with previous findings (the master overhead is a 
bit worse, possibly due to the frame pointers).

Attached are the flame graphs for all three cases. The change in master 
is pretty clearly visible, but I don't see any clear difference between 
old and patched code :-(

regards

-- 
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

Вложения

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

Предыдущее
От: Robert Haas
Дата:
Сообщение: Re: Race condition in recovery?
Следующее
От: Andres Freund
Дата:
Сообщение: Re: Performance degradation of REFRESH MATERIALIZED VIEW