加快购物车进行结帐和结帐保存操作


18

我正在运营多个Magento CE商店,并通过缓存加快速度,但是购物车和结帐仍然很慢。有没有人有加速这些页面的经验或技巧?

也许通过优化数据库?

从结帐保存订单时执行了一些查询,但确实显示在服务器上的慢查询日志中,数据库似乎确实是瓶颈。


慢是什么意思?1秒?5秒?...还提供了有关商店规模的一些详细信息(简单产品的数量,可配置的数量,sales_flat_quote *表的大小等等)。
FlorinelChis

慢速介于5到10秒之间,具体取决于商店的繁忙程度。有50.000个简单产品,没有其他类型。sales_flat_quote ID必须明天查询(目前无法访问)
Sander Mangel

1
您有多少条购物车价格规则?他们减慢了购物车的速度。我们也希望在Service Pack发行版中解决此问题,该发行版预计在13
Piotr Kaminski 2013年

@macki目前没有价格规则,感谢您的提及。多数民众赞成在知道
桑德·曼格尔

Answers:


27
  1. 从个人经验来看,请禁用Mage_Rss模块,该模块会在结帐过程中强制执行4次“缓存清理”操作-如果使用文件系统缓存,则非常昂贵;如果使用数据库或内存缓存,则可能仍然很昂贵。

  2. 出于类似原因,CE仅禁用Mage_Downloadable(只要您不使用Downloadable产品),当购物车中有多个商品时,这将加快结帐和购物车操作的速度,因为在诸如此类的情况下checkout_type_onepage_save_order_after,有观察者将响应时间乘以商品数在购物车中。

  3. 连接xhprof / xhgui并进行一些分析。


谢谢XHProf和XHGui听起来像是一个不错的周末项目
Sander Mangel

1
您实际上应该尝试停用mage_rss或评论其观察者。加快订单保存速度
STANISLAS PIERRE-ALEXANDRE 2013年

1
如果Mage_Rss禁用技巧可用于OP,我想听听第一手反馈
philwinkle

2
我想指出,EE 需要 Mage_Downloadable作为依赖项:Module "Enterprise_PricePermissions" requires module "Mage_Downloadable
philwinkle

1
我没有回过头,对此我感到抱歉。禁用Mage_Rss确实大大加快了速度,禁用Mage_Downloadable并没有带来任何显着的性能改进,但是我不得不说我没有做“适当的”基准测试,只是在浏览器中运行了几次。
桑德·曼格尔

4
  • 将索引设置为手动。
  • 禁用缓存标签存储

这两个更改都会对性能产生巨大影响,因为它阻止了Magento每次刷新订单时都会清空缓存并重新编制索引。

不过,这样做可能要付出一定的代价,内容可能会过时-库存水平等。


谢谢,有缺陷的库存水平是大多数商店的问题。但是对于没有库存管理的商店,请牢记这一点!
桑德·曼格

2

如果您想通过实验方法解决它,可以从德国慕尼黑的第一个magento hackathon扩展一下:

https://github.com/magento-hackathon/MongoDB-OrderTransactions

他们将订单排队到mongo数据库中,这个想法是,如果mysql服务器没有负载将其写回。但是我不知道这个项目已经准备好了多长时间。Afaik负责所有写作,但不负责背面写作。


谢谢,我实际上正在研究noSQL解决方案,这可能是一个不错的起点!
桑德·曼格尔

2

我不知道您正在努力使用的Magento CE版本。但是我的CE 1.6出现严重的性能问题。
原因:错误和缺少索引。它们在CE 1.6.2中已修复,
您可能会检查它是否对您有帮助。
我将38行的总73个项目的结帐时间从123秒减少到4秒!!!!

它来了:

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/* Foreign Keys must be dropped in the target to ensure that requires changes can be done*/

ALTER TABLE `core_url_rewrite` 
DROP FOREIGN KEY `FK_CORE_URL_REWRITE_CTGR_ID_CAT_CTGR_ENTT_ENTT_ID`  , 
DROP FOREIGN KEY `FK_CORE_URL_REWRITE_STORE_ID_CORE_STORE_STORE_ID`  ;


/* Alter table in target */
ALTER TABLE `catalog_category_entity_varchar` 
DROP KEY `MAGMI_CCEV_OPTIMIZATION_IDX` ;


/* Alter table in target */
ALTER TABLE `catalog_product_bundle_stock_index` 
DROP KEY `PRIMARY`, ADD PRIMARY KEY(`entity_id`,`website_id`,`stock_id`,`option_id`) ;


/* Alter table in target */
ALTER TABLE `catalog_product_entity_media_gallery` 
DROP KEY `MAGMI_CPEM_OPTIMIZATION_IDX` ;


/* Alter table in target */
ALTER TABLE `core_url_rewrite` 
CHANGE `id_path` `id_path` varchar(255)  COLLATE utf8_general_ci NULL COMMENT 'Id Path' after `store_id` , 
CHANGE `request_path` `request_path` varchar(255)  COLLATE utf8_general_ci NULL COMMENT 'Request Path' after `id_path` , 
CHANGE `target_path` `target_path` varchar(255)  COLLATE utf8_general_ci NULL COMMENT 'Target Path' after `request_path` , 
CHANGE `is_system` `is_system` smallint(5) unsigned   NULL DEFAULT 1 COMMENT 'Defines is Rewrite System' after `target_path` , 
CHANGE `options` `options` varchar(255)  COLLATE utf8_general_ci NULL COMMENT 'Options' after `is_system` , 
CHANGE `description` `description` varchar(255)  COLLATE utf8_general_ci NULL COMMENT 'Deascription' after `options` , 
CHANGE `category_id` `category_id` int(10) unsigned   NULL COMMENT 'Category Id' after `description` , 
CHANGE `product_id` `product_id` int(10) unsigned   NULL COMMENT 'Product Id' after `category_id` , 
ADD KEY `FK_CORE_URL_REWRITE_PRODUCT_ID_CATALOG_CATEGORY_ENTITY_ENTITY_ID`(`product_id`) , 
DROP KEY `FK_CORE_URL_REWRITE_PRODUCT_ID_CATALOG_PRODUCT_ENTITY_ENTITY_ID` , 
ADD CONSTRAINT `FK_CORE_URL_REWRITE_PRODUCT_ID_CATALOG_CATEGORY_ENTITY_ENTITY_ID` 
FOREIGN KEY (`product_id`) REFERENCES `catalog_product_entity` (`entity_id`) ON DELETE CASCADE ON UPDATE CASCADE , 
DROP FOREIGN KEY `FK_CORE_URL_REWRITE_PRODUCT_ID_CATALOG_PRODUCT_ENTITY_ENTITY_ID`  ;


/* Alter table in target */
ALTER TABLE `eav_attribute` 
DROP KEY `MAGMI_EA_CODE_OPTIMIZATION_IDX` ;


/* Alter table in target */
ALTER TABLE `eav_attribute_option_value` 
DROP KEY `MAGMI_EAOV_OPTIMIZATION_IDX` ;


/* The foreign keys that were dropped are now re-created*/

ALTER TABLE `core_url_rewrite` 
ADD CONSTRAINT `FK_CORE_URL_REWRITE_CTGR_ID_CAT_CTGR_ENTT_ENTT_ID` 
FOREIGN KEY (`category_id`) REFERENCES `catalog_category_entity` (`entity_id`) ON DELETE CASCADE ON UPDATE CASCADE , 
ADD CONSTRAINT `FK_CORE_URL_REWRITE_STORE_ID_CORE_STORE_STORE_ID` 
FOREIGN KEY (`store_id`) REFERENCES `core_store` (`store_id`) ON DELETE CASCADE ON UPDATE CASCADE ;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

1

加快大型数据库运行速度的最佳方法是将数据库放在针对数据库使用进行了优化的自己的服务器上。由于可以安全地缓存很少的东西,因此在代码检查区域没有什么可以改进的地方(尽管某些类型的产品(例如Configurable)确实可以降低报价过程)。


谢谢,为此感到害怕。它已经是具有单独数据库服务器的专用安装。希望他们能在Mage 2中优化结帐:)
Sander Mangel

1
到目前为止,2.0包括许多重写,因此我们可以希望。老实说,产品模型本身是导致结帐速度变慢的很多原因-它必须在创建报价/转换为订单的同时迭代每个产品的类型实例,这可能是一个昂贵的过程。
Andrew Quackenbos

1

也许看一下在数据库中拆分读取和写入。您将需要进行近乎即时的复制设置,尽管这可能一直让我感到担忧,尽管其他人可能对如何最好地配置它有更多的了解。


老实说,Hm不确定这是否是一个可靠的解决方案,听起来像不完整数据的巨大变化。这个想法真的很好!
桑德·曼格

我在一定程度上表示同意,并且承认我自己从未真正做到过,尽管我确实看到各种各样的人写博客文章等暗示他们的性能有了显着提高。如果我能找到一些基准,我会把它们发布出来。
理查德·克莱弗利

谢谢理查德,我也要和我的托管公司谈一谈。我认为他们在这类资料方面拥有更多的经验。如果我有更多信息,我将其发布
Sander Mangel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.