Occasional Slow Commit

From: "David Rees" <drees76(at)gmail(dot)com>
To: pgsql-performance(at)postgresql(dot)org
Subject: Occasional Slow Commit
Date: 2008-10-28 00:23:37
Message-ID: 72dbd3150810271723w57859013v9c4e3718ae86fba@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

Hi,

I've got an OLTP application which occasionally suffers from slow
commit time. The process in question does something like this:

1. Do work
2. begin transaction
3. insert record
4. commit transaction
5. Do more work
6. begin transaction
7. update record
8. commit transaction
9. Do more work

The vast majority of the time, everything runs very quickly. The
median processing time for the whole thing is 7ms.

However, occasionally, processing time will jump up significantly -
the average processing time is around 20ms with the maximum processing
time taking 2-4 seconds for a small percentage of transactions. Ouch!

Turning on statement logging and analyzing the logs of the application
itself shows that step #4 is the culprit of the vast majority of the
slow transactions.

Software: CentOS 4.7, PostgreSQL 8.3.4, Slony-I 1.2.15 (the database
in question is replicated using slony)

Hardware: 2x Xeon 5130, 4GB RAM, 6-disk RAID10 15k RPM, BBU on the controller

Notable configuration changes:
shared_buffers = 800MB
temp_buffers = 200MB
work_mem = 16M
maintenance_work_mem = 800MB
vacuum_cost_delay = 10
checkpoint_segments = 10
effective_cache_size = 2500MB

I found this post[1] from a while back which was informative:

Both situations affect me in that I have Slony which I believe
executes triggers upon commit, and looking at the disk IO stats, there
is an elevated level of IO activity during this time, but it doesn't
appear to be heavy enough to cause the type of delays I am seeing.

Reading this page[2] indicates that I may want to increase my
checkpoint_segments, checkpoint_timeout and bgwriter settings, but
looking at pg_stat_bgwriter seems to indicate that my current settings
are probably OK?

# select * from pg_stat_bgwriter;
checkpoints_timed | checkpoints_req | buffers_checkpoint |
buffers_clean | maxwritten_clean | buffers_backend | buffers_alloc
-------------------+-----------------+--------------------+---------------+------------------+-----------------+---------------
3834 | 105 | 3091905 |
25876 | 110 | 2247576 | 2889873

Any suggestions on how to proceed and debug the problem from here?

My only other guess is that there is some sort of locking issues going
on which is slowing things down and that it may also be slony related,
as I also see a high number of slony related queries taking longer
than 1 second...

Thanks

-Dave

[1] http://archives.postgresql.org/pgsql-performance/2008-01/msg00005.php
[2] http://www.westnet.com/~gsmith/content/postgresql/chkp-bgw-83.htm

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Merlin Moncure 2008-10-28 12:45:52 Re: Occasional Slow Commit
Previous Message Ioana Danes 2008-10-27 14:30:07 maintenance_work_mem and create index