From: | Greg Smith <greg(at)2ndquadrant(dot)com> |
---|---|
To: | Stephen Tyler <stephen(at)stephen-tyler(dot)com> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Excessive (and slow) fsync() within single transaction |
Date: | 2009-12-09 21:38:50 |
Message-ID: | 4B2018EA.5050007@2ndquadrant.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Stephen Tyler wrote:
> The times are apparently in milliseconds. But that doesn't make any
> sense for the 7200rpm SATA HDD, given it has an 8.3ms rotation time.
> And the numbers for the SSD are basically identical to the HDD, apart
> from the bare write timing.
> Do I conclude that the sync timings are all faked by the OS?
PostgreSQL on OS X uses a special fsync method by default named
'fsync_writethrough'. If you do this on your database you should be
able to confirm it's using it:
show wal_sync_method;
This method includes a call to Apple's API to make sure the cache is
properly flushed on the drives. Lots more details about how all this
works at http://www.westnet.com/~gsmith/content/postgresql/TuningPGWAL.htm
I'm not sure if the test_fsync tool actually tests this particular
wal_sync_method though, so on OS X you may only be getting reports that
don't include a proper drive cache flush. The server itself does the
right thing. Making test_fsync do exactly the same thing as the real
WAL write in all cases has been a lingering TODO item for a while now, I
submitted a patch to improve the whole thing a while ago but it's not
really robust in all situations yet. Unfortunately I think you're
getting bad data from the test tool, and I'm not sure of a source for a
similar one that includes the right drive flushing behavior for OS X.
(As a general note, there's a similar call on Windows, and I believe it
also suffers from this problem when running test_fsync ; that little
test utility has really only been tested well on UNIX-ish systems).
What you can do in order to test fsync rate as a side-effect of other
work the server is to run pgbench with a custom script. If you grab a
copy of
http://git.postgresql.org/gitweb?p=pgbench-tools.git;a=blob_plain;f=tests/insert.sql;hb=945164aaadf50ea645750fe77c4ffcecafb5c353and
save that as "insert.sql", then do:
createdb pgbench
pgbench -i -s 10 pgbench
pgbench -s 10 -t 1000 -c 1 -f insert.sql
This will tell you how many insert statements/second are committing,
which is basically just a tiny write to the WAL followed by an fsync.
That's basically the fsync rate of the system, as long as you don't get
a checkpoint in the middle slowing it down.
--
Greg Smith 2ndQuadrant Baltimore, MD
PostgreSQL Training, Services and Support
greg(at)2ndQuadrant(dot)com www.2ndQuadrant.com
From | Date | Subject | |
---|---|---|---|
Next Message | Greg Smith | 2009-12-09 21:49:26 | Re: Excessive (and slow) fsync() within single transaction |
Previous Message | Scott Bailey | 2009-12-09 21:37:02 | Re: [General] beginner!!! |