Thread: 7.4b1 vs 7.3.4 performance

7.4b1 vs 7.3.4 performance

From
"P.J. \"Josh\" Rovero"
Date:
Ran sets of 150 pgbench runs, with clients (1, 2, 4, 8, 16) and
transactions (5 each at 125, 250, 500, 1000, 2000, 4000),
then parsed and plotted with gnuplot. Breaks between number
of clients are at run index 31, 61, 91, etc.  A vacuum
full was performed at each change of number of clients.
Graph attached.

Machine was a quad xeon, two separate database spaces
on a 3 disk software RAID-0 array.  Config file parameters
(buffers, sort mem, logging, etc) were the same.

7.4b1 is significantly faster (i.e., the higher curve)
over this range of clients and transactions.

Will rerun with a vacuum between each number clients/transactions
combination.
--
P. J. "Josh" Rovero                                 Sonalysts, Inc.
Email: rovero@sonalysts.com    www.sonalysts.com    215 Parkway North
Work: (860)326-3671 or 442-4355                     Waterford CT 06385
***********************************************************************

Attachment

Re: 7.4b1 vs 7.3.4 performance

From
expect
Date:
On Tue, 19 Aug 2003 12:47:38 -0400
"P.J. \"Josh\" Rovero" <rovero@sonalysts.com> wrote:

> Ran sets of 150 pgbench runs, with clients (1, 2, 4, 8, 16) and

Where does pgbench come from?


> transactions (5 each at 125, 250, 500, 1000, 2000, 4000),
> then parsed and plotted with gnuplot. Breaks between number
> of clients are at run index 31, 61, 91, etc.  A vacuum
> full was performed at each change of number of clients.
> Graph attached.
>
> Machine was a quad xeon, two separate database spaces
> on a 3 disk software RAID-0 array.  Config file parameters
> (buffers, sort mem, logging, etc) were the same.
>
> 7.4b1 is significantly faster (i.e., the higher curve)
> over this range of clients and transactions.
>
> Will rerun with a vacuum between each number clients/transactions
> combination.
> --
> P. J. "Josh" Rovero                                 Sonalysts, Inc.
> Email: rovero@sonalysts.com    www.sonalysts.com    215 Parkway North
> Work: (860)326-3671 or 442-4355                     Waterford CT 06385
> ***********************************************************************
>

Re: 7.4b1 vs 7.3.4 performance

From
expect
Date:
On Tue, 19 Aug 2003 12:47:38 -0400
"P.J. \"Josh\" Rovero" <rovero@sonalysts.com> wrote:

> Ran sets of 150 pgbench runs, with clients (1, 2, 4, 8, 16) and
> transactions (5 each at 125, 250, 500, 1000, 2000, 4000),
> then parsed and plotted with gnuplot. Breaks between number
> of clients are at run index 31, 61, 91, etc.  A vacuum
> full was performed at each change of number of clients.
> Graph attached.
>
> Machine was a quad xeon, two separate database spaces
> on a 3 disk software RAID-0 array.  Config file parameters
> (buffers, sort mem, logging, etc) were the same.

What were the config settings?

>
> 7.4b1 is significantly faster (i.e., the higher curve)
> over this range of clients and transactions.
>
> Will rerun with a vacuum between each number clients/transactions
> combination.
> --
> P. J. "Josh" Rovero                                 Sonalysts, Inc.
> Email: rovero@sonalysts.com    www.sonalysts.com    215 Parkway North
> Work: (860)326-3671 or 442-4355                     Waterford CT 06385
> ***********************************************************************
>

Re: 7.4b1 vs 7.3.4 performance

From
rovero
Date:
expect wrote:

>
> Where does pgbench come from?
>

pgbench is one of the modules in the postgresql
contrib directory.  After building postgresql,
cd to contrib/pgbench, gmake, su to root,
gmake install.

> What were the config settings?

Both 7.3.4 and 7.4 had:

3072 buffers
4096K sort memory
16384K vacuum memory
fsync false
16 WAL buffers
statistics on




Re: 7.4b1 vs 7.3.4 performance

From
Tom Lane
Date:
"P.J. \"Josh\" Rovero" <rovero@sonalysts.com> writes:
> 7.4b1 is significantly faster (i.e., the higher curve)
> over this range of clients and transactions.

Cool.  I wonder though why the 7.4 curve is so much noisier.

            regards, tom lane

Re: 7.4b1 vs 7.3.4 performance

From
Josh Rovero
Date:
Tom Lane wrote:
> "P.J. \"Josh\" Rovero" <rovero@sonalysts.com> writes:
>
>>7.4b1 is significantly faster (i.e., the higher curve)
>>over this range of clients and transactions.
>
>
> Cool.  I wonder though why the 7.4 curve is so much noisier.

The occurence of postgresql events (WAL recycles, etc) and
system events (reiserfs journal writes, software raid0) isn't
synchronized for each pgbench run.  So one or more of the set
of 5 runs for each number of clients/transactions combination
may "suffer" statistically because the backend or system is
performing some other task.  The only other user apps
running were "tail -f" on the postgresql and pgbench
logs.

Here is a set (clients (1:1:10), transactions (100:100:1000))
where a vacuum full was done prior to each set of 5 runs.
7.4 is still significantly faster, even though results
are noisier and "degradation" as number of transactions
per client increases is steeper.


Attachment

Re: 7.4b1 vs 7.3.4 performance

From
expect
Date:
On Wed, 20 Aug 2003 13:13:38 -0400
rovero <rovero@sonalysts.com> wrote:

> expect wrote:
>
> >
> > Where does pgbench come from?
> >
>
> pgbench is one of the modules in the postgresql
> contrib directory.  After building postgresql,
> cd to contrib/pgbench, gmake, su to root,
> gmake install.

Thank you.

>
> > What were the config settings?
>
> Both 7.3.4 and 7.4 had:
>
> 3072 buffers
> 4096K sort memory
> 16384K vacuum memory
> fsync false
> 16 WAL buffers
> statistics on


I don't know a lot about TPC but I understand it's meant to mimic
multiple teller xactions and that's what you did.  This is not a
request mind you but it would be interesting to see how changing
those configs would alter the performance behavior.


Re: 7.4b1 vs 7.3.4 performance

From
Shridhar Daithankar
Date:
On Wednesday 20 August 2003 22:43, rovero wrote:
> expect wrote:
> > Where does pgbench come from?
>
> pgbench is one of the modules in the postgresql
> contrib directory.  After building postgresql,
> cd to contrib/pgbench, gmake, su to root,
> gmake install.
>
> > What were the config settings?
>
> Both 7.3.4 and 7.4 had:
>
> 3072 buffers
> 4096K sort memory
> 16384K vacuum memory

Since you weren't running any huge sorts thr. pgbench and vacuum, canyou drop
last two to half of these and check?

> fsync false
> 16 WAL buffers
> statistics on

I would put more WAL buffers. 32-64 maybe..

 Shridhar


Re: 7.4b1 vs 7.3.4 performance

From
expect
Date:
On Thu, 21 Aug 2003 12:55:35 +0530
Shridhar Daithankar <shridhar_daithankar@persistent.co.in> wrote:

> On Wednesday 20 August 2003 22:43, rovero wrote:
> > expect wrote:
> > > Where does pgbench come from?
> >
> > pgbench is one of the modules in the postgresql
> > contrib directory.  After building postgresql,
> > cd to contrib/pgbench, gmake, su to root,
> > gmake install.
> >
> > > What were the config settings?
> >
> > Both 7.3.4 and 7.4 had:
> >
> > 3072 buffers
> > 4096K sort memory
> > 16384K vacuum memory
>
> Since you weren't running any huge sorts thr. pgbench and vacuum, canyou drop
> last two to half of these and check?


Just trying to learn a little more about pg perf. behavior....
Are you suggesting that with less memory to "manage" that pg
will run more efficiently?


>
> > fsync false
> > 16 WAL buffers
> > statistics on
>
> I would put more WAL buffers. 32-64 maybe..

It would be interesting to see 10 or 20 plateaus for that number or
at least up to the point of diminishing returns for the load that's applied.
Or maybe it wouldn't?  Maybe it scales.


>
>  Shridhar
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
>       subscribe-nomail command to majordomo@postgresql.org so that your
>       message can get through to the mailing list cleanly
>
>

Re: 7.4b1 vs 7.3.4 performance

From
expect
Date:
On Thu, 21 Aug 2003 06:53:42 -0400
rovero <rovero@sonalysts.com> wrote:

> expect wrote:
>
> >
> > I don't know a lot about TPC but I understand it's meant to mimic
> > multiple teller xactions and that's what you did.  This is not a
> > request mind you but it would be interesting to see how changing
> > those configs would alter the performance behavior.
>
> Actually, those config settings were chosen in much earlier
> (pgsql 7.1, 7.2) rounds of pgbench testing.

I see, certainly makes comparisons much simpler between versions.

>
> There is no substitute for testing with the real
> applications you will be running, but that can get
> very complicated.  Tools like pgbench and osdb
> are still useful in determining good ranges for
> the config parameters.

Sure, agreed.

>
>
>
>
>

Re: 7.4b1 vs 7.3.4 performance

From
"Shridhar Daithankar"
Date:
On 21 Aug 2003 at 8:22, expect wrote:

> On Thu, 21 Aug 2003 12:55:35 +0530
> Shridhar Daithankar <shridhar_daithankar@persistent.co.in> wrote:
> > > Both 7.3.4 and 7.4 had:
> > >
> > > 3072 buffers
> > > 4096K sort memory
> > > 16384K vacuum memory
> >
> > Since you weren't running any huge sorts thr. pgbench and vacuum, canyou drop
> > last two to half of these and check?
> Just trying to learn a little more about pg perf. behavior....
> Are you suggesting that with less memory to "manage" that pg
> will run more efficiently?

Yes. If that is not required, bumping them unnecessarily could have unwanted
side effects at times.

> > > fsync false
> > > 16 WAL buffers
> > > statistics on
> >
> > I would put more WAL buffers. 32-64 maybe..
>
> It would be interesting to see 10 or 20 plateaus for that number or
> at least up to the point of diminishing returns for the load that's applied.
> Or maybe it wouldn't?  Maybe it scales.

WAL is where are transactions are channelled. Pgbench is heavy on transactions
I understand. So if you are trying to tight-loop pgbench for exceedingly large
number of transactions, WAL will be hit like anything and likely become
bottleneck.

If you have bit bigger WAL buffers, then the bottleneck would be slightly eases
but but still it will eb limited by disk IO bandwidth.

Having too many smalll transactions too rapidly can not deliver performance
unless you have proportionate disk bandwidth. You need to size them
appropriately if possible.

HTH
Bye
 Shridhar

--
It is more rational to sacrifice one life than six.        -- Spock, "The Galileo
Seven", stardate 2822.3


Re: 7.4b1 vs 7.3.4 performance

From
Bruce Momjian
Date:
Tom Lane wrote:
> "P.J. \"Josh\" Rovero" <rovero@sonalysts.com> writes:
> > 7.4b1 is significantly faster (i.e., the higher curve)
> > over this range of clients and transactions.
>
> Cool.  I wonder though why the 7.4 curve is so much noisier.

I wonder why pgbench is _so_ much faster on 7.4.  I can't think of
anything that would make that large an improvement.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Re: 7.4b1 vs 7.3.4 performance

From
Tom Lane
Date:
Bruce Momjian <pgman@candle.pha.pa.us> writes:
>> "P.J. \"Josh\" Rovero" <rovero@sonalysts.com> writes:
>>> 7.4b1 is significantly faster (i.e., the higher curve)
>>> over this range of clients and transactions.

> I wonder why pgbench is _so_ much faster on 7.4.  I can't think of
> anything that would make that large an improvement.

I was wondering that too.  I don't think any of the optimizer work I did
for 7.4 would have the slightest impact on pgbench, because its queries
are so simple.  I don't see anything else in the HISTORY file that looks
very promising either.  Perhaps it's just the cumulative result of small
tweaks like optimizing palloc0() and using bitmap sets in the planner.

We should try profiling pgbench runs to learn more...

            regards, tom lane

Re: 7.4b1 vs 7.3.4 performance

From
Tom Lane
Date:
"P.J. \"Josh\" Rovero" <rovero@sonalysts.com> writes:
> Ran sets of 150 pgbench runs, with clients (1, 2, 4, 8, 16) and
> transactions (5 each at 125, 250, 500, 1000, 2000, 4000),

BTW, what was the pgbench "scale factor"?

            regards, tom lane

Re: 7.4b1 vs 7.3.4 performance

From
Jacob Hanson
Date:
It's quite a bit faster for me. I've been doing a lot of reading and
comparing the latest versions of PostgreSQL (7.3.4), Firebird
(1.5RC5), MySQL (InnoDB, 4.0.14) on a dual P3-850 using Apache2.0.47
and PHP 4.3.3RC4 on Redhat 9. I loaded the databases up with identical
schemas and a couple of tables with 70k rows each.

I've been a MySQL user for a long time, but I need/want a lot of the
features that it doesn't have for my next project. Plus, stuff like
referential integrity and transactions in MySQL are pretty weak
compared to the others.

I've been trying to get an idea of how the DBs would perform, since
(SELECT) speed is a primary concern. My tests consist of looping
various simple operations I'll be doing in a PHP script, e.g.
connecting, grabbing a single (random for this test) row, and
disconnecting, say 1000 times. Or I've got one that will grab a block
of 1000 rows (from a random position) with a left join. Pretty simple
stuff.

This weekend I upgraded to 7.4b1 and ran my tests. There was
significant improvements across the board. PostgreSQL's times went
down some 25-50% for these things. And this is using a stock config (I
know, I know, I'm going to fix it). (BTW, should changing config
parameters show any improvements the tests I'm doing aren't causing it
to swap? I know it's mandatory when I place it under load...)

With 7.3.4, PostgreSQL generally fell midway between MySQL and
Firebird. With 7.4b1, (I can't recall many specifics right now, but)
some operations were actually faster that MySQL! Some operations were
slower (inserting xxxxx records, I believe). But for the majority of
my tests, PostgreSQL was neck-and-neck with MySQL. Very impressive.

Unfortunately, Firebird was consistently third. I had high hopes for
it, but it was definitely slower. I know they're looking heavily at
performance for 2.0, which will be interesting to see.

Granted, these tests didn't accurately simulate a real-world load, but
that won't be doable until the project is done. Anyway, I'm going to
use PostgreSQL!

Jacob Hanson
jacdx@jacobhanson.com

> (Bruce Momjian) wrote:
>I wonder why pgbench is _so_ much faster on 7.4.  I can't think of
>anything that would make that large an improvement.


Re: 7.4b1 vs 7.3.4 performance

From
Alvaro Herrera
Date:
On Tue, Aug 26, 2003 at 02:57:29PM -0600, Jacob Hanson wrote:

> This weekend I upgraded to 7.4b1 and ran my tests. There was
> significant improvements across the board. PostgreSQL's times went
> down some 25-50% for these things. And this is using a stock config (I
> know, I know, I'm going to fix it). (BTW, should changing config
> parameters show any improvements the tests I'm doing aren't causing it
> to swap? I know it's mandatory when I place it under load...)
>
> With 7.3.4, PostgreSQL generally fell midway between MySQL and
> Firebird. With 7.4b1, (I can't recall many specifics right now, but)
> some operations were actually faster that MySQL! Some operations were
> slower (inserting xxxxx records, I believe). But for the majority of
> my tests, PostgreSQL was neck-and-neck with MySQL. Very impressive.

Well, a possible explanation is that 7.4b1 uses a different "default
configuration".  The amount of memory it uses is actually determined at
install time (initdb time to be exact), so you will have a much more
reasonable default values than with previous versions.  It's very
possible that it affected your benchmark.  See how many shared_buffers
you got, for example (probably 1000 - it was 64 in previous versions
IIRC).

It's very nice to know that it actually performs within MySQL's numbers,
even for such a simple test.

--
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
One man's impedance mismatch is another man's layer of abstraction.
(Lincoln Yeoh)

Re: 7.4b1 vs 7.3.4 performance

From
"Shridhar Daithankar"
Date:
On 27 Aug 2003 at 1:14, Alvaro Herrera wrote:
> Well, a possible explanation is that 7.4b1 uses a different "default
> configuration".  The amount of memory it uses is actually determined at
> install time (initdb time to be exact), so you will have a much more
> reasonable default values than with previous versions.  It's very
> possible that it affected your benchmark.  See how many shared_buffers
> you got, for example (probably 1000 - it was 64 in previous versions
> IIRC).

I doubt that. I have CVS head installed and I don't recalling seeing a
different default. Need to confirm though..

Bye
 Shridhar

--
Johnson's First Law:    When any mechanical contrivance fails, it will do so at
the    most inconvenient possible time.


Re: 7.4b1 vs 7.3.4 performance

From
"Shridhar Daithankar"
Date:
On 26 Aug 2003 at 14:57, Jacob Hanson wrote:
> This weekend I upgraded to 7.4b1 and ran my tests. There was
> significant improvements across the board. PostgreSQL's times went
> down some 25-50% for these things. And this is using a stock config (I
> know, I know, I'm going to fix it). (BTW, should changing config
> parameters show any improvements the tests I'm doing aren't causing it
> to swap? I know it's mandatory when I place it under load...)

It makes difference for the plan it chooses. Setting effective cache and shared
buffers right is a must. Shared buffers is a hit-n-miss game. You need to find
your own sweet spot but effective cache is pretty straight forward and should
be set properly at all times..

> Granted, these tests didn't accurately simulate a real-world load, but
> that won't be doable until the project is done. Anyway, I'm going to
> use PostgreSQL!

If postgresql works fastest for your own load, would you really care if mysql
wins performance bechmark over network RAID with one disk placed on moon?

Maybe the results aren't representative but they are far more valuable to you
than any other representative bechmarks..

Bye
 Shridhar

--
Your job is being a professor and researcher: That's one hell of a good
excusefor some of the brain-damages of minix.(Linus Torvalds to Andrew
Tanenbaum)


Re: 7.4b1 vs 7.3.4 performance

From
Tom Lane
Date:
"P. Joshua Rovero" <rovero@sonalysts.com> writes:
>>> Ran sets of 150 pgbench runs, with clients (1, 2, 4, 8, 16) and
>>> transactions (5 each at 125, 250, 500, 1000, 2000, 4000),
>>
>> BTW, what was the pgbench "scale factor"?

> 1 for these cases.

Hm.  You really want scale factor >= number of clients, else you will
mostly be measuring the effects of contention.  The scale factor is the
same as the number of rows created in the "branches" table, and every
transaction wants to update one of the "branches" rows.  So if you have
just one branch, all the clients try to update that same row every time,
effectively serializing their transactions.

I now suspect that what you measured is just some marginal improvement
we made in the lock manager.  Not sure what, though.

            regards, tom lane

Re: 7.4b1 vs 7.3.4 performance

From
"P. Joshua Rovero"
Date:
Tom Lane wrote:

> "P.J. \"Josh\" Rovero" <rovero@sonalysts.com> writes:
>
>>Ran sets of 150 pgbench runs, with clients (1, 2, 4, 8, 16) and
>>transactions (5 each at 125, 250, 500, 1000, 2000, 4000),
>
>
> BTW, what was the pgbench "scale factor"?
>
>             regards, tom lane

1 for these cases.



Re: 7.4b1 vs 7.3.4 performance

From
Bo Lorentsen
Date:
On Tue, 2003-08-26 at 22:57, Jacob Hanson wrote:

> I've been a MySQL user for a long time, but I need/want a lot of the
> features that it doesn't have for my next project. Plus, stuff like
> referential integrity and transactions in MySQL are pretty weak
> compared to the others.
Just out of curiosity, does this releate to MySQL 3.x or 4.x ? Have you
evaluteded the RI and transactions in version 4 ?

/BL