On 2013-10-14 15:51:14 +0200, Andres Freund wrote:
> > > It'd probably not hurt to redo those benchmarks to make sure...
> > 
> > Yes, I think it would be good to characterize it more precisely than
> > "a bit", so people know what to expect.
> 
> A "bit" was below the 3% range for loops of adding columns.
> 
> So, any tests you'd like to see?
> * loop around CREATE TABLE/DROP TABLE
> * loop around ALTER TABLE ... ADD COLUMN
> * loop around CREATE FUNCTION/DROP FUNCTION

So, see the attatched benchmark skript. I've always done using a disk
bound and a memory bound (using eatmydata, preventing fsyncs) run.

* unpatched run, wal_level = hot_standby, eatmydata
* unpatched run, wal_level = hot_standby

* patched run, wal_level = hot_standby, eatmydata
* patched run, wal_level = hot_standby

* patched run, wal_level = logical, eatmydata
* patched run, wal_level = logical

Based on those results, there's no difference above noise for
wal_level=hot_standby, with or without the patch. With wal_level=logical
there's a measurable increase in wal traffic (~12-17%), but no
performance decrease above noise.

>From my POV that's ok, those are really crazy catalog workloads.

Greetings,

Andres Freund

-- 
 Andres Freund                     http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services
$ eatmydata /tmp/bench.sh
createtable single
tps = 320.293146 (including connections establishing)
tps = 320.334981 (excluding connections establishing)
262152  /tmp/perf/pg_xlog
createtable parallel
tps = 1516.095491 (including connections establishing)
tps = 1516.488664 (excluding connections establishing)
1163272 /tmp/perf/pg_xlog
altertable single
tps = 139.474141 (including connections establishing)
tps = 139.491721 (excluding connections establishing)
163848  /tmp/perf/pg_xlog
altertable parallel
tps = 774.868029 (including connections establishing)
tps = 775.136842 (excluding connections establishing)
851976  /tmp/perf/pg_xlog
createfunction single
tps = 2938.380801 (including connections establishing)
tps = 2938.711692 (excluding connections establishing)
81928   /tmp/perf/pg_xlog
createfunction parallel
tps = 20603.023567 (including connections establishing)
tps = 20608.799987 (excluding connections establishing)
458760  /tmp/perf/pg_xlog

$ /tmp/bench.sh
createtable single
tps = 51.014096 (including connections establishing)
tps = 51.020329 (excluding connections establishing)
49160   /tmp/perf/pg_xlog
createtable parallel
tps = 171.012045 (including connections establishing)
tps = 171.054406 (excluding connections establishing)
147464  /tmp/perf/pg_xlog
altertable single
tps = 9.138758 (including connections establishing)
tps = 9.139863 (excluding connections establishing)
32776   /tmp/perf/pg_xlog
altertable parallel
tps = 45.109269 (including connections establishing)
tps = 45.122066 (excluding connections establishing)
65544   /tmp/perf/pg_xlog
createfunction single
tps = 131.192719 (including connections establishing)
tps = 131.209112 (excluding connections establishing)
16392   /tmp/perf/pg_xlog
createfunction parallel
tps = 624.830173 (including connections establishing)
tps = 625.017525 (excluding connections establishing)
32776   /tmp/perf/pg_xlog

-- patch applied --
$ eatmydata /tmp/bench.sh
createtable single
tps = 329.063474 (including connections establishing)
tps = 329.104147 (excluding connections establishing)
262152  /tmp/perf/pg_xlog
createtable parallel
tps = 1462.524932 (including connections establishing)
tps = 1462.872552 (excluding connections establishing)
1130504 /tmp/perf/pg_xlog
altertable single
tps = 141.091905 (including connections establishing)
tps = 141.108352 (excluding connections establishing)
163848  /tmp/perf/pg_xlog
altertable parallel
tps = 812.810544 (including connections establishing)
tps = 813.026734 (excluding connections establishing)
901128  /tmp/perf/pg_xlog
createfunction single
tps = 3384.068190 (including connections establishing)
tps = 3384.460953 (excluding connections establishing)
81928   /tmp/perf/pg_xlog
createfunction parallel
tps = 20744.363972 (including connections establishing)
tps = 20750.135978 (excluding connections establishing)
458760  /tmp/perf/pg_xlog

$ /tmp/bench.sh
createtable single
tps = 42.522505 (including connections establishing)
tps = 42.527233 (excluding connections establishing)
49160   /tmp/perf/pg_xlog
createtable parallel
tps = 148.753762 (including connections establishing)
tps = 148.794361 (excluding connections establishing)
131080  /tmp/perf/pg_xlog
altertable single
tps = 9.524616 (including connections establishing)
tps = 9.525757 (excluding connections establishing)
32776   /tmp/perf/pg_xlog
altertable parallel
tps = 49.209278 (including connections establishing)
tps = 49.223312 (excluding connections establishing)
65544   /tmp/perf/pg_xlog
createfunction single
tps = 132.325526 (including connections establishing)
tps = 132.340677 (excluding connections establishing)
16392   /tmp/perf/pg_xlog
createfunction parallel
tps = 654.730078 (including connections establishing)
tps = 654.951506 (excluding connections establishing)
32776   /tmp/perf/pg_xlog

-- patch applied wal_level = logical --
$ eatmydata /tmp/bench.sh
createtable single
tps = 323.503496 (including connections establishing)
tps = 323.542429 (excluding connections establishing)
311304  /tmp/perf/pg_xlog
createtable parallel
tps = 1537.166484 (including connections establishing)
tps = 1537.599205 (excluding connections establishing)
1441800 /tmp/perf/pg_xlog
altertable single
tps = 137.785443 (including connections establishing)
tps = 137.802088 (excluding connections establishing)
196616  /tmp/perf/pg_xlog
altertable parallel
tps = 759.320764 (including connections establishing)
tps = 759.616314 (excluding connections establishing)
1064968 /tmp/perf/pg_xlog
createfunction single
tps = 3206.263449 (including connections establishing)
tps = 3206.635093 (excluding connections establishing)
98312   /tmp/perf/pg_xlog
createfunction parallel
tps = 20454.430246 (including connections establishing)
tps = 20460.920317 (excluding connections establishing)
557064  /tmp/perf/pg_xlog

$ /tmp/bench.sh
createtable single
tps = 44.728192 (including connections establishing)
tps = 44.733640 (excluding connections establishing)
65544   /tmp/perf/pg_xlog
createtable parallel
tps = 180.100543 (including connections establishing)
tps = 180.158944 (excluding connections establishing)
196616  /tmp/perf/pg_xlog
altertable single
tps = 10.651403 (including connections establishing)
tps = 10.652567 (excluding connections establishing)
32776   /tmp/perf/pg_xlog
altertable parallel
tps = 46.401373 (including connections establishing)
tps = 46.414657 (excluding connections establishing)
81928   /tmp/perf/pg_xlog
createfunction single
tps = 136.372357 (including connections establishing)
tps = 136.388755 (excluding connections establishing)
16392   /tmp/perf/pg_xlog
createfunction parallel
tps = 685.702432 (including connections establishing)
tps = 685.883334 (excluding connections establishing)
32776   /tmp/perf/pg_xlog

Attachment: bench.sh
Description: Bourne shell script

CREATE TABLE foo:client_id(id serial, data text, anotherdata int);
ALTER TABLE foo:client_id ADD COLUMN col_01 int;
ALTER TABLE foo:client_id ADD COLUMN col_02 int;
ALTER TABLE foo:client_id ADD COLUMN col_03 int;
ALTER TABLE foo:client_id ADD COLUMN col_04 int;
ALTER TABLE foo:client_id ADD COLUMN col_05 int;
ALTER TABLE foo:client_id ADD COLUMN col_06 int;
ALTER TABLE foo:client_id ADD COLUMN col_07 int;
ALTER TABLE foo:client_id ADD COLUMN col_08 int;
ALTER TABLE foo:client_id ADD COLUMN col_09 int;
ALTER TABLE foo:client_id ADD COLUMN col_10 int;
ALTER TABLE foo:client_id ADD COLUMN col_11 int;
ALTER TABLE foo:client_id ADD COLUMN col_12 int;
ALTER TABLE foo:client_id ADD COLUMN col_13 int;
ALTER TABLE foo:client_id ADD COLUMN col_14 int;
ALTER TABLE foo:client_id ADD COLUMN col_15 int;
ALTER TABLE foo:client_id ADD COLUMN col_16 int;
ALTER TABLE foo:client_id ADD COLUMN col_17 int;
ALTER TABLE foo:client_id ADD COLUMN col_18 int;
ALTER TABLE foo:client_id ADD COLUMN col_19 int;
DROP TABLE foo:client_id;
CREATE FUNCTION foo:client_id(param int) RETURNS int LANGUAGE sql AS $b$SELECT 
1 + $1;$b$;
DROP FUNCTION foo:client_id(int);
CREATE TABLE foo:client_id(id serial, data text, anotherdata int);
DROP TABLE foo:client_id;
-- 
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