[Dieter Maurer]
> We are currently tuning an application for performance and therefore
> perform intensive profiling. To our surprise, it turned out
> that about 15% of total request time was spent in
> "Connection.afterCompletion". "Connection.afterCompletion" is mapped
> to "Connection._storage_sync" which in our case called the
> "ZEO.ClientStorage"'s "sync" method (and this caused the excessive
> time).
> What is the motivation to request synchronized transaction completion
> by default?

Primarily so we could stop seeing endless threads on zodb-dev asking
why ZEO clients that didn't happen to modify any objects never saw
current data.  From the NEWS file:

- (3.4a6) Relatedly, ``Connection`` implements ``ISynchronizer``, and
  ``Connection``'s ``afterCompletion()`` and ``newTransaction()`` methods now
  call ``sync()`` on the underlying storage (if the underlying storage has
  such a method), in addition to processing invalidations.  The practical
  implication is that storage synchronization will be done automatically now,
  whenever a transaction is explicitly started, and after top-level
  transaction commit or abort.  As a result, ``Connection.sync()`` should
  virtually never be needed anymore, and will eventually be deprecated.
For more information about ZODB, see the ZODB Wiki:

ZODB-Dev mailing list  -  ZODB-Dev@zope.org

Reply via email to