mysql – 如何让Magento更快地保存产品?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 如何让Magento更快地保存产品?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3724字,纯文字阅读大概需要6分钟。
内容图文
![mysql – 如何让Magento更快地保存产品?](/upload/InfoBanner/zyjiaocheng/910/ff4eb8b3b77441dca1634716503879b1.jpg)
此行以下的所有内容都已过期. Magento只是很慢,没有更多,仅此而已.
在由于HostGator缺乏root权限而陷入困境之后,我最终会自行分析Magento调用.
以下是其中一个结果:
蓝色:时间1982878436 Mage_Sales_Model_Mysql4_Quote begin< - 在输入Mage_Sales_Model_Mysql4_Quote的保存方法时记录此信息. 蓝色:时间1982878436 Mage_Sales_Model_Mysql4_Quote 46< - 并在退出时记录. 号码1982878436是作为呼叫ID生成的随机数.数字46是以秒为单位的时间.
2012-09-26T06:36:16+00:00 DEBUG (7): Blue: timing 1982878436 Mage_Sales_Model_Mysql4_Quote begin
2012-09-26T06:36:18+00:00 DEBUG (7): Blue: timing 645597828 Mage_Log_Model_Mysql4_Visitor begin
2012-09-26T06:36:18+00:00 DEBUG (7): Blue: 645597828 Varien_Db_Adapter_Pdo_Mysql
2012-09-26T06:36:18+00:00 DEBUG (7): Blue: timing 645597828 Mage_Log_Model_Mysql4_Visitor 0
2012-09-26T06:36:18+00:00 DEBUG (7): Blue: timing 1712949075 Mage_Sales_Model_Mysql4_Quote begin
2012-09-26T06:36:24+00:00 DEBUG (7): Blue: timing 2103820838 Mage_Sales_Model_Mysql4_Quote begin
2012-09-26T06:36:56+00:00 DEBUG (7): Blue: timing 1999314779 Mage_Log_Model_Mysql4_Visitor begin
2012-09-26T06:36:56+00:00 DEBUG (7): Blue: 1999314779 Varien_Db_Adapter_Pdo_Mysql
2012-09-26T06:36:56+00:00 DEBUG (7): Blue: timing 1999314779 Mage_Log_Model_Mysql4_Visitor 0
2012-09-26T06:36:56+00:00 DEBUG (7): Blue: timing 504509596 Mage_Sales_Model_Mysql4_Quote begin
2012-09-26T06:36:56+00:00 DEBUG (7): Blue: timing 1887845167 Mage_Log_Model_Mysql4_Visitor begin
2012-09-26T06:36:56+00:00 DEBUG (7): Blue: timing 1887845167 Mage_Log_Model_Mysql4_Visitor 0
2012-09-26T06:37:02+00:00 DEBUG (7): Blue: timing 1887308594 Mage_GoogleOptimizer_Model_Mysql4_Code begin
2012-09-26T06:37:02+00:00 DEBUG (7): Blue: timing 1887308594 Mage_GoogleOptimizer_Model_Mysql4_Code 0
2012-09-26T06:37:02+00:00 DEBUG (7): Blue: 504509596 Varien_Db_Adapter_Pdo_Mysql
2012-09-26T06:37:02+00:00 DEBUG (7): Blue: timing 504509596 Mage_Sales_Model_Mysql4_Quote 6
2012-09-26T06:37:02+00:00 DEBUG (7): Blue: 1982878436 Varien_Db_Adapter_Pdo_Mysql
2012-09-26T06:37:02+00:00 DEBUG (7): Blue: timing 1982878436 Mage_Sales_Model_Mysql4_Quote 46
2012-09-26T06:37:02+00:00 DEBUG (7): Blue: 1712949075 Varien_Db_Adapter_Pdo_Mysql
2012-09-26T06:37:02+00:00 DEBUG (7): Blue: timing 1712949075 Mage_Sales_Model_Mysql4_Quote 44
2012-09-26T06:37:02+00:00 DEBUG (7): Blue: 2103820838 Varien_Db_Adapter_Pdo_Mysql
2012-09-26T06:37:02+00:00 DEBUG (7): Blue: timing 2103820838 Mage_Sales_Model_Mysql4_Quote 38
我们可以看到1982878436,1712949075,2103820838并行调用,每个都需要几十秒才能完成.我怀疑这三个电话中有一些锁定问题让他们互相等待.有时当我保存产品时,Magento甚至会报告操作失败,因为MySQL由于死锁而失败.
任何人对此都有任何想法?
解决方法:
当运行查询inloving IN时,MySQL总是使最外面的表领先.
这意味着这个查询:
UPDATE {$this->getTable('sales/quote')} SET trigger_recollect = 1
WHERE entity_id IN (
SELECT DISTINCT quote_id
FROM {$this->getTable('sales/quote_item')}
WHERE product_id IN (SELECT DISTINCT product_id FROM {$this->getTable('catalogrule/rule_product_price')})
必须扫描销售/报价中的每条记录,并根据sales / quote_item进行检查,而sales / quote_item必须根据catalogrule / rule_product_price检查每条匹配的记录.
如果销售/报价中的记录明显多于子查询返回的记录,则这将很慢.
您可能希望将其重写为连接:
UPDATE {$this->getTable('catalogrule/rule_product_price')} crpp
JOIN {$this->getTable('sales/quote_item')} sqi
ON sqi.product_id = crpp.product_id
JOIN {$this->getTable('sales/quote')} sq
ON sq.entity_id = sqi.quote_id
SET sq.trigger_recollect = 1
这样,优化器可以选择使哪个表成为前导(当每个连接字段被索引时,它应该是最小的表).
内容总结
以上是互联网集市为您收集整理的mysql – 如何让Magento更快地保存产品?全部内容,希望文章能够帮你解决mysql – 如何让Magento更快地保存产品?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。