Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search for
  Advanced Search

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: Wed, 7 Sep 2005 15:01:14 -0400
  • Message-id: <6EE64EF3AB31D5448D0007DD34EEB3417DD299(at)Herge(dot)rcsinc(dot)local>

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



Home | Main Index | Thread Index

Privacy Policy | PostgreSQL Archives hosted by Command Prompt, Inc. | Designed by tinysofa
Copyright © 1996 – 2008 PostgreSQL Global Development Group