[PyQt] QSqlDatabase connection parameters

Russell Valentine russ at coldstonelabs.org
Fri Mar 19 21:27:31 GMT 2010


So if you did the exact same statements your program is doing with psql
to the remote server, they take a similar time as the local?

You say similar dataset, just wondering if maybe the remote was missing
a index or hasn't been vacuumed in a while. Can you do a vacuum yourself
just to double check?


Russell Valentine

On 03/19/10 15:29, Scott Frankel wrote:
> 
> On Mar 19, 2010, at 12:24 PM, Russell Valentine wrote:
> 
>> Perhaps time each part to see what exactly is taking up the time?
> 
> 
> Thanks for the suggestion.  I was hoping to find a global parameter
> (buffer_size, or similar) that could be tweaked to improve overall
> performance.
> 
> My app loads a dozen QSqlRelationalTableModel objects, in addition to
> various support data.  Remotely, each table model requires roughly 2 to
> 3 seconds to load.  Locally, each requires 0.12 seconds to load!
> 
> I'm already printing timing statements to help with my optimization
> efforts to date.  Complete output is long.  Here are some highlights:
> 
> #-------------------------------------------------------------------------------
> 
> # remote data launch
> #-------------------------------------------------------------------------------
> 
> 2010-03-19 12:56:02.580540 Application launch
> 
> 2010-03-19 12:56:05.538501 connecting...
> 2010-03-19 12:56:06.564915 database connection opened
> [ ~1 second to open the connection ]
> 
> 2010-03-19 12:56:11.091056 loading application support data...
> 2010-03-19 12:56:16.912604 user data loaded...
> [ ~6 seconds to load QSqlRelationalTableModel objects, using unfiltered
> select() methods ]
> 
> ...
> 2010-03-19 12:56:24.943313 form 3/12 set
> 2010-03-19 12:56:27.320105 form 4/12 set
> ...
> [ ~2.5 seconds for each of 12 forms to load additional data model
> objects and set widgets accordingly ]
> 
> 2010-03-19 12:56:45.861150 ready...
> [ ~43 seconds to launch ]
> 
> 
> 
> #-------------------------------------------------------------------------------
> 
> # local data launch
> #-------------------------------------------------------------------------------
> 
> 2010-03-19 13:13:02.606677 Application launch
> ...
> 2010-03-19 13:13:05.733303 form 3/12 set
> 2010-03-19 13:13:05.854210 form 4/12 set
> [ ~0.12 seconds for each of 12 forms to load additional data model
> objects and set widgets accordingly ]
> ...
> 2010-03-19 13:13:06.710319 ready...
> [ ~4 seconds to launch, start to finish ]
> 
> 
> 
>> One
>> way to do so is below:
>>
>> t=time.time()
>> dostuff()
>> print "dostuff() time = "+str(time.time()-t)+" s"
>>
>> Is it really the initial connection that takes a long time to get, or is
>> it something else on that remote machine. work_mem has nothing to do
>> with making a connection for example.
>>
>> On 03/19/10 14:06, 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
>>>
>>>
>>>
>>> On Mar 16, 2010, at 9:09 PM, Scott Frankel wrote:
>>>
>>>>
>>>> Hi all,
>>>>
>>>> Is there a buffer size or similar optimization parameter that can be
>>>> set for QSqlDatabase PSQL connections?  The docs refer to PostgreSQL
>>>> "options" without specifying what they may be.
>>>>
>>>> I have a PG database cluster of about 7MB, spread over a couple dozen
>>>> tables.  Locally, it takes about 6 seconds to launch my app, loading
>>>> the model data into my forms.
>>>>
>>>> When I pull an identical data-set from a remote location, my
>>>> application launch time increases to over 60 seconds.  Yet resource
>>>> utilization on the remote server is miniscule.
>>>>
>>>> For comparison, I'm able to download the results of a 21MB SELECT
>>>> statement in less than 8 seconds via cmd-line psql.  That's orders of
>>>> magnitude more data in an order of magnitude less time!
>>>>
>>>> I'm creating my db connection as follows.  (Sample code attached also.)
>>>>
>>>>    db = QtSql.QSqlDatabase.addDatabase("QPSQL")
>>>>    db.setDatabaseName("fubar")
>>>>    db.setHostName("localhost")
>>>>    db.setUserName("admin")
>>>>    db.setPassword("abc123")
>>>>
>>>>
>>>> Thanks in advance!
>>>> Scott
>>>>
>>>>


More information about the PyQt mailing list