Subtransactions used to be used for two purposes:
* ensure that newly created objects get "_p_" attributes
(especially "_p_jar" and "_p_oid")
* release memory in the mid of large transactions
(i.e. reading and/or writing large amounts of objects)
With ZODB 3.4, subtransactions are implemented as savepoints.
They can still be used for the first purpose.
But, they no longer start cache garbage collection.
As a consequence, subtransactions/savepoints can be dropped
at places where only the second purpose has mattered, e.g.
in Zope's ZCatalog.
For more information about ZODB, see the ZODB Wiki:
ZODB-Dev mailing list - ZODB-Dev@zope.org