更新一个性能良好的产品

时间:2013-04-28 15:35:00

标签: performance magento

我想知道为什么每个产品的更新每个产品需要10个! 即使没有更新任何内容,只需按“保存”按钮即可。

我发现product_save_after上有一个观察者 name是:applyAllRulesOnProduct

因此,即使您不更改价格,也会将此促销活动应用于此产品! 不仅如此,它还会更新所有报价! 后者大约花了2秒,每次更新都做了4次! 这是查询:

UPDATE `sales_flat_quote` AS `t1`
 INNER JOIN (SELECT `t2`.`quote_id` AS `entity_id` FROM `sales_flat_quote_item`     AS `t2`
INNER JOIN `catalogrule_product_price` AS `t3`
 WHERE (t2.product_id = t3.product_id) GROUP BY `quote_id`) AS `t2` ON t1.entity_id     =     t2.entity_id
SET `t1`.`trigger_recollect` = 1"

我想知道为什么会这样做,更新所有报价而不更新价格? 我称之为一个错误。 Magento应检查哪个字段已更新...

顺便说一下,即使我已经配置了自动清理日志,sales_flate_quote表也永远不会被magento清空。 因此,一个“解决方案”是删除超过5天前完成的所有报价:     DELETE FROM sales_flat_quote WHERE updated_at< DATE_SUB(Now(),INTERVAL 5 DAY)

这大大缩短了查询的持续时间。 0.3秒!

现在,我想知道你们中有些人是否找到了另一种解决方案。 我正在考虑删除观察者,并每天刷新规则(促销)。 副作用是价格的更新不会立即反映在促销中。

另一个解决方案是在后台运行它。 我已经购买了Magento嵌入式ERP,它有一个后台任务的概念,我将检查是否可以在ERP任务之上插入这个。因此,当我保存产品时,会在后台创建一个任务来运行“applyAllRulesOnProduct”

请注意,我的数据库中有30 000种产品,我每天都会与供应商同步价格。 在每次更新10秒之前,幸运的是只有少数产品的价格每天都会发生变化,否则会花费10 * 30000/3600 =超过2天: - )

感谢有关缩短产品更新的任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式禁用相关事件:

$product->setIsMassupdate(true);
$product->setExcludeUrlRewrite(true);