On Fri, Feb 14, 2014 at 2:50 PM, Andres Freund <andres@2ndquadrant.com>wrote:
> On 2014-02-14 23:03:44 +0100, Clemens Eisserer wrote:
> > Hi Tom,
> >
> > Thanks for taking a look at my bug report.
> >
> > > But if you're generating WAL, it's going to get written anyway
> > > whenever a transaction commits.
> >
> > As far as I understood, this is only the case with
> > synchronous_commit=on, which is the reason why I turned synchrous
> > commit off.
>
> The WAL writer will be woken up anyway if a transaction commits
> (c.f. XLogSetAsyncXactLSN()).
>
That only happens if an 8 KB boundary has been crossed. Depending on how
big the records are that he is inserting, you can fit a lot of them in 8
KB. If the records are small, or the table us unlogged so only commit
messages get logged, then you could go many multiples of 10s without
triggering a wake up due to crossing an 8 KB boundary.
So if we did change the upper limit (or if Clemens adds 2 zeros to guc.c
and compiles his own) he should be able to get quite a bit of mileage out
of it.
Why do we awaken it for every 8KB boundary? I thought there was code to
wake it when wal_buffers was 1/3 full, but I don't see that code anymore.
Cheers,
Jeff