[DB-SIG] Python/PostgreSQL API performance comparison (update)

Chris Cogdon chris at cogdon.org
Sun May 25 13:45:04 EDT 2003


It was suggested to me that PgSQL would perform better if it was 
configured to return a simple list of tuples rather than a PgResultSet 
(which has some cool abilities, like being able to do 
cur.fetchone()['columnname'], for example). So, I've updated my 
performance comparison code ( 
http//onca.catsden.net/~chris/testtimes.py ) to include the new case, 
and the current results are like this:

method [ user time, system time, child user time, child system time, 
real time ]
pg [ 0.120, 0.020, 0.000, 0.000, 29.580 ]
pgdb [ 4.490, 0.010, 0.000, 0.000, 33.250 ]
PgSQL [ 3.650, 0.010, 0.000, 0.000, 41.150 ]
PgSQL (nocursor) [ 3.620, 0.010, 0.000, 0.000, 32.320 ]
PgSQL (nocursor,list) [ 3.550, 0.010, 0.000, 0.000, 32.360 ]
PoPy [ 0.120, 0.000, 0.000, 0.000, 28.990 ]

There is a very very small performance gain by using straight lists in 
pyPgSQL.

Something I forgot to mention last time. The user/system times above 
are for the 'application' process only. Obviously, there is a lot of 
work being dome by the postmaster which is only factored into the above 
times as part of the 'real time' it takes to do the full query.

The performance loss of using DECLARE cursors (shown in the PgSQL 
non-nocursor above) is probably extra work being done by the DMBS 
causing the longer response time. In short, DECLARE cursors probably 
save memory on the application side at the expense of extra work at the 
DMBS. If the application and DMBS reside on the same machine (pretty 
common for web applications), then there's probably no point using 
DECLARE cursors.

Is this kind of thing useful to folk, or would you prefer me shut up 
about it? :)

-- 
    ("`-/")_.-'"``-._        Chris Cogdon <chris at cogdon.org>
     . . `; -._    )-;-,_`)
    (v_,)'  _  )`-.\  ``-'
   _.- _..-_/ / ((.'
((,.-'   ((,/   fL




More information about the DB-SIG mailing list