我们刚刚通过我们的托管公司升级了我们的专用web服务器,从一台使用了3年的双核8 8GB机器,运行PHP5.1和MySQL 5.1。
新服务器是6核、8 8GB /WHM服务器,运行PHP5.4和MySQL 5.5
我很抱歉,因为我不是一个聪明的程序员,但因为我们是一家小公司,我是整个IT部门!
我们的eCommerce网站(基于电子商务模板的代码)现在运行非常慢,托管公司只能说问题出在我们的PHP/MySQL代码上。他们告诉我,实际上每个查询都需要2秒或更长的时间才能运行。
数据库有大约20,000个产品和60个表。400Mb大小。
我很欣赏我们的代码可能有点过时,但是仅仅因为PHP/MySQL的“改进”,就真的需要20秒来加载一个过去不到2秒就能加载的页面吗?
下面是一个通过MySQLAdmin使用EXPLAIN的示例:
将SELECT COUNT( DISTINCT products.pId )解释为bar FROM products LEFT JOIN multisections ON products.pId = multisections.pId WHERE pDisplay <>0 AND ( products.pSection IN ( 274 ) OR multisections.pSection IN ( 274 ))
1个简单产品全部为空20728使用where
1个简单的多节ref PRIMARY 130 homesupply.products.pID 31使用where;使用索引
我在这里已经超出了我的能力范围,我担心的是MyISAM和InnoDB,排序问题等等。
我目前唯一的选择就是跳回我们的旧服务器,直到我们可以重新编码我们的网站,如果发现这是一个简单的设置导致了这个问题,我会很沮丧。
谢谢
发布于 2015-02-17 20:06:09
在新的PHP中这不会是一个问题,这是非常不可能的。问题很可能出在MYSQL中。我建议做以下几件事:
1)重建所有索引。不正确地升级到较新的MySQL版本可能会在文件中留下一些旧索引,您可以安全地重建所有索引,只需修复所有表:
mysqlcheck -p -A -r2)查看哪些查询速度较慢。执行以下MySQL语句以查看:
SHOW FULL PROCESSLIST;您可能需要对队列中非常长的所有查询运行EXPLAIN,检查它是否正确地使用了适当的索引。有时,较新的mysql版本可能不会像以前的版本那样对相同的查询使用相同的索引。当mysql无法使用正确的索引时,您可能需要在查询中添加强制索引。
3)检查日志文件。MySQL有一个日志文件,它在其中报告可能的问题。它的位置取决于您的设置,在我的服务器上,它在mysql数据目录中。
4)在MySQL中禁用DNS查找,您的新版本可能会默认启用。您可能需要在mysql配置文件中配置跳过名称解析。实际上,比较新旧配置文件可以提供一些不同之处的提示。
发布于 2015-09-02 14:03:50
这周我遇到了这个问题。
那是IPv6
尝试完全禁用IPv6。这很可能是一些本地服务/插件正在尝试IPv6连接(google api等),这些连接在回落到v4之前必须超时。
我可以访问IPv6地址空间,所以我启用了它并配置了主机以正确使用它。
https://stackoverflow.com/questions/28560884
复制相似问题