[Erp5-report] r29672 - /erp5/trunk/products/CMFActivity/skins/activity/
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Oct 15 14:33:38 CEST 2009
Author: vincent
Date: Thu Oct 15 14:33:35 2009
New Revision: 29672
URL: http://svn.erp5.org?rev=29672&view=rev
Log:
Improve "ORDER BY" condition:
- remove uid and date sort, they causes pathologic cases in
"site reindexation" payloads:
Module indexation creates per-module batches of activities. All activities
in a given batch will have identical date values, so indexation will happen
on only one module at a time, which creates a bottleneck on setups where
modules are scattered to multiple ZEOs (precisely to paralellise work on
different modules).
- random sort added for multinode setups (see dtml comment, this is serious)
Modified:
erp5/trunk/products/CMFActivity/skins/activity/SQLDict_reserveMessageList.zsql
erp5/trunk/products/CMFActivity/skins/activity/SQLQueue_reserveMessageList.zsql
Modified: erp5/trunk/products/CMFActivity/skins/activity/SQLDict_reserveMessageList.zsql
URL: http://svn.erp5.org/erp5/trunk/products/CMFActivity/skins/activity/SQLDict_reserveMessageList.zsql?rev=29672&r1=29671&r2=29672&view=diff
==============================================================================
--- erp5/trunk/products/CMFActivity/skins/activity/SQLDict_reserveMessageList.zsql [utf8] (original)
+++ erp5/trunk/products/CMFActivity/skins/activity/SQLDict_reserveMessageList.zsql [utf8] Thu Oct 15 14:33:35 2009
@@ -21,7 +21,16 @@
AND date <= <dtml-sqlvar to_date type="datetime">
<dtml-if expr="group_method_id is not None"> AND group_method_id = <dtml-sqlvar group_method_id type="string"> </dtml-if>
ORDER BY
- priority, date, uid
+<dtml-comment>
+ Explanation of the order by:
+ - priority must be respected (it is a feature)
+ - when multiple nodes simultaneously try to fetch activities, they should not
+ be given the same set of lines as it would cause all minus one to wait for
+ a write lock (and be ultimately aborted), effectively serializing their
+ action (so breaking paralellism).
+ So we must force MySQL to update lines in a random order.
+</dtml-comment>
+ priority, RAND()
LIMIT <dtml-sqlvar count type="int">
<dtml-var sql_delimiter>
COMMIT
Modified: erp5/trunk/products/CMFActivity/skins/activity/SQLQueue_reserveMessageList.zsql
URL: http://svn.erp5.org/erp5/trunk/products/CMFActivity/skins/activity/SQLQueue_reserveMessageList.zsql?rev=29672&r1=29671&r2=29672&view=diff
==============================================================================
--- erp5/trunk/products/CMFActivity/skins/activity/SQLQueue_reserveMessageList.zsql [utf8] (original)
+++ erp5/trunk/products/CMFActivity/skins/activity/SQLQueue_reserveMessageList.zsql [utf8] Thu Oct 15 14:33:35 2009
@@ -19,7 +19,16 @@
processing_node=0
AND date <= <dtml-sqlvar to_date type="datetime">
ORDER BY
- priority, date, uid
+<dtml-comment>
+ Explanation of the order by:
+ - priority must be respected (it is a feature)
+ - when multiple nodes simultaneously try to fetch activities, they should not
+ be given the same set of lines as it would cause all minus one to wait for
+ a write lock (and be ultimately aborted), effectively serializing their
+ action (so breaking paralellism).
+ So we must force MySQL to update lines in a random order.
+</dtml-comment>
+ priority, RAND()
LIMIT <dtml-sqlvar count type="int">
<dtml-var sql_delimiter>
COMMIT
More information about the Erp5-report
mailing list