我们刚刚通过我们的托管公司升级了我们的专用网络服务器,这是一台运行PHP 5.1和MySQL 5.1的3GB双核,8GB Plesk机器。
新服务器是运行PHP 5.4和MySQL 5.5的6核,8GB cPanel / WHM服务器
我很抱歉因为我不是一个聪明的程序员,但由于我们是一家小公司,我是整个IT部门!
我们的电子商务网站(基于电子商务模板的代码)现在运行速度非常慢,托管公司只能说我们的PHP / MySQL代码存在问题。他们告诉我,几乎每个查询都需要2秒或更长时间才能运行。
数据库有大约20,000个产品和60个表。 400Mb。
我很欣赏我们的代码可能有点过时但是因为PHP / MySQL已经“改进”了,加载一个曾经在不到2秒内加载的页面真的需要20秒吗?
以下是通过MySQLAdmin使用EXPLAIN的示例:
EXPLAIN SELECT COUNT(DISTINCT products.pId)AS 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 SIMPLE products ALL NULL NULL NULL NULL 20728使用where
1 SIMPLE multisections ref PRIMARY PRIMARY 130 homesupply.products.pID 31使用where;使用索引
我不在这里,担心MyISAM与InnoDB,整理问题等等。
目前我唯一的选择是跳回我们的旧服务器,直到我们可以重新编码我们的网站,并且会发现它是一个导致问题的简单设置。
由于
答案 0 :(得分:2)
它不会成为新PHP的问题,这种可能性极小。很可能问题出在MYSQL中。我建议做以下事情:
1)重建所有索引。不正确的升级到更新的MySQL版本可能会离开 一些旧的索引存档,你可以安全地重建所有,只需修复所有表:
mysqlcheck -p -A -r
2)检查哪些查询很慢。执行以下MySQL语句以查看:
SHOW FULL PROCESSLIST;
您可能需要对队列中很长的所有查询运行EXPLAIN,检查它是否正确使用了索引。有时,较新的mysql版本可能不会像以前的版本那样对同一个查询使用相同的索引。您可能需要在mysql无法使用正确索引的查询中添加FORCE INDEX。
3)检查日志文件。 MySQL有一个日志文件,用于报告可能存在的问题。它的位置取决于您的设置,在我的服务器上它位于mysql数据目录中。
4)在MySQL中禁用DNS查找,默认情况下可能会在新版本上启用。您可能需要在mysql配置文件中配置skip-name-resolve。实际上,比较旧的和新的配置文件可以提供一些不同的提示。
答案 1 :(得分:1)
本周我遇到了这个问题。
是IPv6
尝试完全禁用IPv6。很可能是某些本地服务/插件正在尝试IPv6连接(google api等),这些连接必须在它们回到v4之前超时。
我可以访问IPv6地址空间,因此我启用了它并配置主机正确使用它。