Re: Changes improve the performance of INSERT and UPDATE

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Hiroki Kataoka <kataoka(at)interwiz(dot)jp>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Changes improve the performance of INSERT and UPDATE
Date: 2005-08-13 17:50:42
Message-ID: 14460.1123955442@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hiroki Kataoka <kataoka(at)interwiz(dot)jp> writes:
>>> This small patch improves the performance of INSERT and UPDATE. By my
>>> machine, these changes raised the performance about 5%~10% in pgbench.
>>
>> BTW, in profiling the backend I've never seen PageAddItem take more than
>> about 1% of the runtime, and in pgbench in particular it seems to be
>> down around 0.1% ... so the above seems a bit optimistic ...

> I have the nearly same result, but pgbench says different. I don't know
> why my test generates 5~10% performance improvement. Therefore, I want
> to take a benchmark in a reliable environment.

I've been testing this patch a bit, and I'm unable to measure any
consistent improvement in pgbench times (sometimes it seems to win,
and some other times it doesn't). And gprof still swears up and down
that PageAddItem is only about 0.1% of the runtime, which would make
it impossible to obtain more than an 0.1% speedup. I'm inclined to
write off your result as measurement error --- it's notoriously hard
to get reproducible results out of pgbench.

> By reference, PageAddItem takes 4%~5% of the runtime in the heavy
> writing operation likes CREATE TABLE AS SELECT.

I tried making a million-row table with just two int4 columns and then
duplicating it with CREATE TABLE AS SELECT. In this context gprof
shows PageAddItem as taking 7% of the runtime, which your patch knocks
down to 1.5%. This seems to be about the best possible real-world case,
though (the wider the rows, the fewer times PageAddItem can loop), and
so I'm still unconvinced that there's a generic gain here. Adding an
additional word to page headers has a very definite cost --- we can
assume about a .05% increase in net I/O demands across *every*
application, whether they do a lot of inserts or not --- and so a
patch that provides a noticeable improvement in only a very small set
of circumstances is going to have to be rejected.

Has anyone else experimented with this patch? Have you gotten any
better impression of the cost/benefit ratio than I'm getting?

regards, tom lane

PS: If we were going to apply the patch, I'd be inclined to compensate
for the space usage by removing the pd_tli field, which isn't actually
ever used anywhere in the current code. Then the argument would become
one about opportunity costs --- will we ever need pd_tli in the future?
I don't think we yet have enough experience with the "timeline" feature
to be sure either way.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2005-08-13 17:57:05 Re: psql SET/RESET/SHOW tab completion
Previous Message Michael Fuhr 2005-08-13 17:40:22 Re: psql SET/RESET/SHOW tab completion