On Mon, Nov 7, 2016 at 5:55 AM, Amit Kapila <amit.kapil...@gmail.com> wrote:

> On Tue, Sep 20, 2016 at 8:15 AM, Tsunakawa, Takayuki
> <tsunakawa.ta...@jp.fujitsu.com> wrote:
> > Hello,
> >
> >> From: pgsql-hackers-ow...@postgresql.org
> >> [mailto:pgsql-hackers-ow...@postgresql.org] On Behalf Of Magnus
> Hagander
> >> On Wed, Aug 24, 2016 at 4:35 AM, Tsunakawa, Takayuki
> >> <tsunakawa.ta...@jp.fujitsu.com> wrote:
> >>       As a similar topic, I wonder whether the following still holds
> true,
> >> after many improvements on shared buffer lock contention.
> >>
> >>       https://www.postgresql.org/docs/devel/static/runtime-config-re
> >> source.html
> >>
> >>               "The useful range for shared_buffers on Windows systems
> >> is generally from 64MB to 512MB."
> >>
> >>
> >>
> >>
> >> Yes, that may very much be out of date as well. A good set of benchmarks
> >> around that would definitely be welcome.
> >
> >
> > I'd like to propose the above-mentioned comment from the manual.  The
> patch is attached.
> >
> > I ran read-only and read-write modes of pgbench, and could not see any
> apparent decrease in performance when I increased shared_buffers.  The
> scaling factor is 200, where the database size is roughly 3GB.  I ran the
> benchmark on my Windows 10 PC with 6 CPU cores and 16GB of RAM.  The
> database and WAL is stored on the same HDD.
> >
> > <<Test batch file>>
> > @echo off
> > for %%s in (256MB 512MB 1GB 2GB 4GB) do (
> >   pg_ctl -w -o "-c shared_buffers=%%s" start
> >   pgbench -c18 -j6 -T60 -S bench >> g:\b.txt 2>&1
> >   pg_ctl -t 3600 stop
> > )
> >
> > <<Select-only (with -S)>>
> > shared_buffers  tps
> > 256MB  63056
> > 512MB  63918
> > 1GB  65520
> > 2GB  66840
> > 4GB  68270
> >
> > <<Read-write (without -S)>>
> > shared_buffers  tps
> > 256MB  1138
> > 512MB  1187
> > 1GB  1571
> > 2GB  1650
> > 4GB  1598
> >
>
> Isn't it somewhat strange that writes are showing big win whereas
> reads doesn't show much win?


I don't find that unusual, and have seen the same thing on Linux.

With small shared_buffers, you are constantly throwing dirty buffers at the
kernel in no particular order, and the kernel does a poor job of predicting
when the same buffer will be dirtied repeatedly and only needs the final
version of the data actually written to disk. With large shared_buffers,
you only send each dirty buffer to the kernel once per checkpoint.

Cheers,

Jeff

Reply via email to