我正在使用一个基于OpenCart 1.5.6.4的网站,该网站已经从原始网站中被高度修改(添加索引,修改查询,您可以说,这只是为了性能)。
服务器是一个带有2×2 2GHz处理器、50 4GB和4GB RAM的VPS。目前它有CentOS 6,Apache2.2.15,MySQL 5.1.73。该网站是一个在线商店,约有50,000产品和9家供应商。
整个系统的最初逻辑是:
我在更新过程中遇到了一些麻烦。我尝试过一些不同的脚本(选择多个表上每个两个表之间的所有公共值。),但是只运行一个查询需要大约3秒。
我没有太多的OOP经验,所以我处理数组:我在一个数组中加载所有的产品数据,在另一个数组中加载排除列表,我检查第一个数组中的产品是否没有在第二个数组中设置,对规则做数学运算,用大容量INSERT [...] ON DUPLICATE KEY UPDATE [...]编写数据。
整个更新需要使用ages,大约在20秒和“吃掉”65% CPU (基于phpmyadmin中的读数)。我需要一个解决方案:运行非常-非常快(我不介意CPU)或花费更长时间,但对CPU的影响较小.基本上,服务器上有8个连接,大约有50%的CPU使用率,这意味着原始的update.php崩溃了。
我尝试添加LOCK TABLES product WRITE、query、UNLOCK TABLES,但是性能提高了0.x秒。更新过程在一个查询中有大约40,000种产品.它花费的时间太长,占用了太多的CPU和锁表很长时间。
我能做些什么?
LE:代码在这里, http://inpromo.ro/update.txt
基本上有9个分销商,有站点类别和分销商类别(必须映射.未映射的类别不会在网站中添加他们的产品),也有制造商也必须进行映射(同样的制造商可以显示为:华硕或华硕组件),如下所示。
LE2: One查询如下所示:
更新产品集stock_status_id=5,quantity=0,status=0,其中status=1或quantity!=0或stock_status_id!=5
它需要2-3秒来完成(根据PHP的microtime()函数),这是一个很大的过程!
发布于 2014-12-27 12:26:48
由于整个脚本运行在代码块上,我注意到对于所有现有产品,我使用了“插入.在重复的键更新.”在索引表上,如: product_description、product_category、product_to_store (这些表不包含股票、价格等关键数据),整个过程需要额外的90 12内存和大量时间(~12秒)。
现在的逻辑是:
product ..。关于重复密钥更新..。发布于 2014-12-26 11:09:01
是谁触发了这次更新?
1)正常的在线用户
( 2)工作
3)你在政府工作吗?
也许你也可以贴一些代码行或者你正在使用的查询。
PS:不使用OOP并不坏,但在opencart这样的OOP平台上工作却不知道OOP .
阅读这篇文章
发布于 2014-12-28 10:15:51
很抱歉问了一些很平常的问题,你试过这样做吗:
希望我能给出一些想法。
https://stackoverflow.com/questions/27656182
复制相似问题