On Tue, Aug 25, 2015 at 5:21 PM, Amit Kapila <amit.kapil...@gmail.com>
wrote:
>
> On Thu, Aug 20, 2015 at 3:49 PM, Andres Freund <and...@anarazel.de> wrote:
> > How hard did you try checking whether this causes regressions? This
> > increases the number of atomics in the commit path a fair bit. I doubt
> > it's really bad, but it seems like a good idea to benchmark something
> > like a single full-throttle writer and a large number of readers.
>
> One way to test this is run pgbench read load (with 100 client count) and
> write load (tpc-b - with one client) simultaneously and check the results.
> I have tried this and there is lot of variation(more than 50%) in tps in
> different runs  of write load, so not sure if this is the right way to
> benchmark it.
>
> Another possible way is to hack pgbench code and make one thread run
> write transaction and others run read transactions.

I have hacked pgbench to achieve single-writer-multi-reader test and below
are results:

M/c Configuration
-----------------------------
IBM POWER-8 24 cores, 192 hardware threads
RAM = 492GB

Non-default parameters
------------------------------------
max_connections = 150
shared_buffers=8GB
min_wal_size=10GB
max_wal_size=15GB
checkpoint_timeout    =30min
maintenance_work_mem = 1GB
checkpoint_completion_target = 0.9
wal_buffers = 256MB

Data is for 3, 15 minutes pgbench (1-Writer, 127-Readers) test runs

Without ProcArrayLock optimization-
Commitid – 253de7e1
Client Count/No. Of Runs (tps) 128 Run-1 208011 Run-2 471598 Run-3 218295


With ProcArrayLock optimization -
Commitid – 0e141c0f
Client Count/No. Of Runs (tps) 128 Run-1 222839 Run-2 469483 Run-3 215791


It seems the test runs get dominated by I/O due to writer client which
leads to variation in performance numbers. In general, I don't see any
noticeable difference in performance with or without procarraylock
optimisation.  I have tried even by turning off synchronous_commit and
fsync, but the results are quite similar.

pgbench modifications
-----------------------------------
Introduced a new type of test run with -W option which means single
writer and multi-reader, example if user has given 128 clients and 128
threads, it will use 1-Thread for Write (Update) transaction and 127 for
Select Only transaction.  This works specifically for this use case as
I had no intention to make a generic test.  Please note, it will work
properly
if number of clients and threads input by user are same.  Attached find
the pgbench patch, I have used for this test. Note that, I have used
-W option in pgbench run as mentioned in below steps.

Test steps for each Run
--------------------------------------------------------------------------------------------------------
1. Start Server
2. dropdb postgres
3. createdb posters
4. pgbench -i -s 300 postgres
5. pgbench -c $threads -j $threads -T 1800 -M prepared -W postgres
6. checkpoint
7. Stop Server



With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com

Attachment: pgbench_singlewriter_multireader_v1.patch
Description: Binary data

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to