[PyQt] QSqlDatabase connection parameters

Scott Frankel frankel at circlesfx.com
Fri Mar 19 22:04:32 GMT 2010


On Mar 19, 2010, at 2:27 PM, Russell Valentine wrote:

> 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?

No, the statements to the remote server take 20x longer!
2.5 (remote) vs. 0.12 (local) seconds.


> You say similar dataset,

Identical.  I created a new database locally and on the remote server,  
then imported the same schema and test data sql files to both.


> 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?

I follow the same steps for my local db and the remote server:
- dropdb
- createdb
- import schema.sql
- import testData.sql
- launch app ...

Furthermore, monitoring usage on the remote machine shows minuscule  
load during my app's launch and operations.

I'm going to switch gears and look into multi-threading my data model  
loads and select() statements.

Thanks for the suggestions!  Much appreciated.
Scott




>
>
> 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
>>>>>
>>>>>
> _______________________________________________
> PyQt mailing list    PyQt at riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt
>











More information about the PyQt mailing list