Re: Benchmark comparing PostgreSQL, MySQL and Oracle - Mailing list pgsql-performance

From Sergio Lopez
Subject Re: Benchmark comparing PostgreSQL, MySQL and Oracle
Date
Msg-id 20090221000445.00000a93@slp-opensol
Whole thread Raw
In response to Re: Benchmark comparing PostgreSQL, MySQL and Oracle  ("Jonah H. Harris" <jonah.harris@gmail.com>)
List pgsql-performance
El Fri, 20 Feb 2009 14:48:06 -0500
"Jonah H. Harris" <jonah.harris@gmail.com> escribió:

> On Fri, Feb 20, 2009 at 1:15 PM, Sergio Lopez
> <sergio.lopez@nologin.es>wrote:
>
> Having this said, the benchmark is not as unfair as you thought. I've
> > taken care to prepare all databases to meet similar values for their
> > cache, buffers and I/O configuration (to what's possible given their
> > differences), and the I've left the rest as comes by default (for
> > Oracle I've used the OLTP template).
>
>
> Oracle's buffer cache is different than Postgres'.  And there are
> several other tuning paramaters which control how the buffer cache
> and I/O between cache and disk is performed.  Making them the same
> size means nothing.  And, as I said, you still didn't mention other
> important tuning parameters in MySQL, Postgres, or Oracle.  So either
> you don't know about them, or you didn't bother to tune them, which
> is odd if you were trying to run a truly comparative benchmark.
>

As I written in the article, I only tuned a few parameters and let the
other out-the-box. More info:

  - Oracle:
    * AMM, sga_max_size/sga_target_size=4GB (yes, it's pretty low
for a 20 GB RAM machine, but remember I needed to run the tests in
another 10 GB RAM SPARC server and still need some more memory for
database and redo (10 warehouses == about 1 GB of data)
    * db_block_size=8k (this also answers the other email)
    * filesystem_io=setall (which souldn't make difference, anyway)
    * db_writer_processes=2 (with a extremly fast tmpfs, incresing this
will obviously be counterproductive)

  - MySQL:
    * innodb_buffer_pool_size=4GB
    * innodb_log_file_size=512MB

  - PostgreSQL:
    * effective_cache_size=4GB
    * shared_pool_size=512MB
    * fsync = on
    * synchronous_commit = on
    * wal_sync_method = fsync
    * checkpoint_segments = 100
    * checkpoint_completion_target = 0.7

If you have some suggestions to do about this configurations, please
tell me so I can put them in the next benchmark (which, hopefully, will
use a nice performing SAN instead of tmpfs).

> > Yes, BenchmarkSQL is NOT the perfect tool for database benchmarking
> > and it is NOT a valid TPC-C test (I've made this clear in the
> > article), but I've looked at its source (you assume I blindly used
> > it, but actually I've even made some changes to make it work with
> > Ingres for other purposes) and I find it fair enough due to the
> > simplicity of the queries it executes. I found no other evident
> > optimization than the "vacuum analyze" in the LoadData application.
>
>
> Did you fix the bug in, I believe, the Order Status transaction that
> can cause an endless loop?  I would call giving the Postgres
> optimizer correct statistics and leaving Oracle and MySQL with
> defaults an optimization.
>

The bug was in the Delivery transaction, and yes, I fixed it. It was a
simple bad locking behaviour, solved by properly using the "FOR UPDATE"
clause.

> > Obviously, you can optimize the queries to perform better in Oracle,
> > the same way you can do with any other DB, but doing that would be
> > cheating. The key here is to keep the queries as simple as possible,
> > and BenchmarkSQL does this nicely.
>
>
> BenchmarkSQL is flawed.  You need to review the code more closely.
>

Please, could you point the bugs (or at least some of them) you're
referring to? That would be very helpful for me, so I can fix them for
the next benchmark.

> Of course, my benchmark it's somewhat peculiar by the fact (that you
> > haven't mentioned) that all databases files reside in volatile
> > storage (RAM) by using tmpfs, which makes something similar (but
> > not the same) as using DIRECT_IO with an extremly fast storage.
> > But, again, all databases are given equal consideration.
>
>
> You're right, it's not the same.  Oracle can benefit by using real
> direct I/O, not half-baked simulations which still cause
> double-buffering between the linux page cache and the database buffer
> cache.
>

_All_ databases can benefit from direct I/O, specially for their redo
files. But, in this benchmark we don't have double buffering (nor
read-ahead) issues, or do you expect Linux or Solaris to cache data
which is already in RAM (tmpfs)?


pgsql-performance by date:

Previous
From: Rodrigo E. De León Plicet
Date:
Subject: Re: not in(subselect) in 8.4
Next
From: Sergio Lopez
Date:
Subject: Re: Benchmark comparing PostgreSQL, MySQL and Oracle