> The ZODB is actually very fast. [...]
> So you're probably observing slowness in the frameworks on top of it.

I'll believe this anytime :-]

In our case, a transaction may be a workflow state change on say 50 objects.
Two or three people try a transaction like that within a couple of seconds
of one another, and ConflictErrors crop up.

In a log with 402 ConflictErrors, 225 are on BTrees (_IIBTree.IITreeSet,
_IOBTree.IOBucket, _OOBTree.OOBTree, _OOBTree.OOBucket all feature). We
assume these all relate to catalog indexing.

Of the rest, 147 of the 177 are either Products.Transience.Transience.Increaser
or Products.Transience.Transience.Length2

The role the framework (Plone, unsurprisingly) is playing in this case, is
that it leans hard on the catalog during a transaction lasting a number of

To mitigate this, we want to create a savepoint and then commit more often
while iterating and changing workflow, rolling back to the savepoint if

For more information about ZODB, see the ZODB Wiki:

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

Reply via email to