[PyQt] QSqlDatabase connection parameters

Matt Newell newellm at blur.com
Fri Mar 19 19:59:53 GMT 2010


On Friday 19 March 2010 12:06:12 Scott Frankel wrote:
> Hi all,
>
> Would anyone have any suggestions for improving QSqlDatabase PSQL
> connection performance?
>
>
> The Qt docs refer to PSQL connection options and demonstrate the
> "requiressl=1" example.  Are there other options that can be set?
> (eg:  the docs' PostgreSQL "options" bullet point)  Google searches
> are coming up short.
>
> I note that my local postgresql.conf file has a "work_mem" statement.
> (Usage:  work_mem = 1MB)  That could be germane, but including the
> term in my setConnectOptions() method (as part of a semi-colon
> separated list) yields PSQL errors.
>
> I've optimized my working code further.  Running from a local data
> set, launch times are down to 4 seconds.  Running from an identical
> data set hosted remotely, my application launches in 40+ seconds!
>
> Thanks in advance!
> Scott
>
I always disable prepared connection inside the qsqlpsql driver, just add a 
return false; line after the PreparedQueries case statement in the 
hasFeatures function(that's all from memory, names may be off).  This will 
only help if you are using QSqlQuery.prepare, which i use for the api 
convenience, not because i actually want prepared queries.  This will reduce 
the roundtrip count and could make a difference if roundtrip time is an 
issue.

On the server you should enable logging of queries that take over a certain 
amount of time.  This will help you narrow down places where you need indexes 
or better designed queries.

Also it's possible to use multiple connection each from it's own thread.  I 
haven't done this in pyqt alone, but have done this quite a lot in c++/qt 
apps.

Other than that just reducing the total number of queries, which can be done 
by more intelligent/complex queries, or by stored procedures.

The qsqlpsql driver is a fairly thin wrapper around psql so I don't really 
think there is a lot of performance gains to be had by changing any settings.

Matt


More information about the PyQt mailing list