[Zope-dev] Re: When should one call Connection.sync?

Dieter Maurer dieter at handshake.de
Thu Apr 22 18:48:27 EDT 2004


Syver Enstad wrote at 2004-4-21 18:03 +0200:
>Syver Enstad <syver at inout.no> writes:
>
>> I am using ZODB 3.2 in a twisted based web application. I have read
>> that I need to call sync to keep the connection up to date. When
>> exactly should I call sync? Are there any drawbacks with calling it
>> immediately after getting a connection, like this:
>> 
>> # for each http request.
>> connection = db.open() # (a DB instance)
>> connection.setLocalTransaction()
>> connection.sync()
>> 
>> # start using the ZODB here.
>> 
>> # if something needs to be committed
>> connection.getTransaction().commit()
>
>I have done some experiments with this scheme and I find that
>everything gets unloaded when do a connection.close() or
>connection.sync() so that performance takes quite a hit.

Maybe, the connection cache is too small.

Usually, an incremental cache garbage collection is performed
in "connection.close()" and at transaction boundaries
("sync" causes an implicit "transaction.abort()" which means,
it marks a transaction boundary). The cache garbage collection
tries to flush as many objects from the cache as are necessary
to reach the target cache size.

-- 
Dieter



More information about the Zope-Dev mailing list