Hi Pierre,

First of all , I Thank all for sharing the information on this Issue.

On Thu, Mar 25, 2010 at 11:44 PM, Pierre C <li...@peufeu.com> wrote:
>

> If you do large transactions, which emits large quantities of xlog, be
> aware that while the previous xlog segment is being fsynced, no new writes
> happen to the next segment. If you use large wal_buffers (more than 16 MB)
> these buffers can absorb xlog data while the previous segment is being
> fsynced, which allows a higher throughput. However, large wal_buffers also
> mean the COMMIT of small transactions might find lots of data in the buffers
> that noone has written/synced yet, which isn't good. If you use dedicated
> spindle(s) for the xlog, you can set the walwriter to be extremely
> aggressive (write every 5 ms for instance) and use fdatasync. This way, at
> almost every rotation of the disk, xlog gets written. I've found this
> configuration gives increased throughput, while not compromising latency,
> but you need to test it for yourself, it depends on your whole system.


Small testing is done from my end. I have created a "test" table with one
row and done insertion into it(10,00,000- rows). I have turned off fsync and
syncronous_commit. I saw there is fast insert if i do so, but if i turn it
on then there is latency.

Before fsync / syncronous_commit on
============================
postgres=# explain analyze insert into test
values(generate_series(1,1000000));
                                         QUERY PLAN
---------------------------------------------------------------------------------------------
 Result  (cost=0.00..0.01 rows=1 width=0) (actual time=0.015..6293.674
rows=1000000 loops=1)
 Total runtime: *37406.012 ms*
(2 rows)


After fsync/syncronous_commit off
=========================
postgres=# explain analyze insert into test
values(generate_series(1,1000000));
                                         QUERY PLAN
---------------------------------------------------------------------------------------------
 Result  (cost=0.00..0.01 rows=1 width=0) (actual time=0.154..5801.584
rows=1000000 loops=1)
 Total runtime: *29378.626 ms
*(2 rows)

I request to know here is,  what would be xlog files with wal_buffer. Does
xlog will recycle or grow in creating one more for this particular
transaction. Could you explain here, when wal_buffer is 64kb which is very
small, and everything is in xlog files written, so wt happens if we increase
the wal_buffer here?

Regards
Raghav

Reply via email to