Re: [PERFORM] insert performance for win32

From: "Merlin Moncure" <merlin(dot)moncure(at)rcsonline(dot)com>
To: "Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: <pgsql-hackers-win32(at)postgresql(dot)org>
Subject: Re: [PERFORM] insert performance for win32
Date: 2005-09-07 19:01:14
Message-ID: 6EE64EF3AB31D5448D0007DD34EEB3417DD299@Herge.rcsinc.local
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers-win32

Tom Lane wrote:
> Just to be clear: what you were testing was
> BEGIN;
> INSERT ... VALUES (...);
> repeat insert many times
> COMMIT;
roger.

> with each statement issued as a separate PQexec() operation, correct?
> Was this set up as a psql script, or specialized C code? (If a psql
> script, I wonder whether it's psql that's chewing the time.)

I thought that too. I'm running dump file piped to psql in quiet mode,
output redirected to file. Here is the profile for psql:

Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls s/call s/call name
40.74 1.65 1.65 499988 0.00 0.00 yylex
10.37 2.07 0.42 249994 0.00 0.00 SendQuery
7.41 2.37 0.30 1499959 0.00 0.00 GetVariable
7.16 2.66 0.29 1 0.29 3.71 MainLoop
4.94 2.86 0.20 499988 0.00 0.00 psql_scan
3.95 3.02 0.16 249999 0.00 0.00 SetVariable
3.46 3.16 0.14 5999686 0.00 0.00 emit
2.47 3.26 0.10 pg_strcasecmp

which tells nothing. I think next step is to write libpq app running
the test case and compare execparams vs. exec vs. psql. win32 has
excellent hardware timer which I can use.

The mingw gprof self seconds, btw, are low and unreliable. One thing I
do know is that I block commented out vast sections of the file /*...*/.
on 200k rec load, times were
to load 50k recs in a single transaction, with 2nd and 3rd 50 recs
commented.
commented time
block 1 no 30
block 2 yes 39
block 3 yes 24
block 4 no 69

this suggests psql read time is constant (but rather slow) but per
insert time grows.

> > 2. ran a 50k profile vs. 250k profile. Nothing jumps out as being
> > slower or faster: most time is spent in yyparse on either side.
From
> > this my preliminary conclusion is that there is something going on
in
> > the win32 api which is not showing in the profile.
>
> Hmm. Client/server data transport maybe? It would be interesting to
> try inserting the same data in other ways:
> * COPY from client

runs super fast (500k recs in a few seconds)

> * INSERT/SELECT from another table
> and see whether you see a similar slowdown.

the command I used to generate test file, insert ... select from
generate_series runs super quick, as does create table as select..

merlin

Browse pgsql-hackers-win32 by date

  From Date Subject
Next Message Dave Page 2005-09-08 13:46:07 pgInstaller 8.1 dev build
Previous Message Tom Lane 2005-09-07 15:02:13 Re: [PERFORM] insert performance for win32