我是一名网页设计师,因此对任何缺乏知识表示歉意,并感谢可以提供的任何参考资料。
情况就是这样,我们公司有一系列我们在内部使用的 webapps,它们是用 PHP 和 MySQL 构建的。我们将它们托管在 hostgator 专用服务器(4 核 4GB RAM)上。
最近,管理层希望将服务器搬到离家更近的地方(英国),我们决定购买 Heart Internet混合服务器(12 核和 28GB RAM)。
传输已经完成,我们肯定可以看到静态页面和简单查询页面的速度有了很大的提高。
但是,每当尝试访问迭代大量记录(从 10,000 条以上)的页面时,该页面只会加载和加载......在 WHM 中,我们可以在“当前进程”下看到服务器 CPU 失控,从 20% 的低位开始,一直增加到 200%+!
我知道查询的设计并不出色(内部选择使用不当等)我试图在某些情况下通过更好的索引使用来纠正这个问题,并且在某些情况下这提高了性能。但是,由于 Web 应用程序如此庞大,重写糟糕的 SQL 并以这种方式提高性能需要很长时间。
我怀疑这更有可能是服务器配置错误,因为查询确实在我们以前的服务器上工作,但速度有点慢。另一个可能的原因是在以前的服务器上建立了某种缓存,但不在新服务器上,因此自然需要一些时间来“创建”。
下面是挂在新服务器上但未挂在旧服务器上的查询之一的示例(只花了大约 4/5 秒)。
SELECT DISTINCT o.order_number, o.customer_id, o.order_date, CONCAT( cd.customer_fname, ' ', customer_lname ) AS CustomerName, (
SELECT status_id
FROM Order_Tracking
WHERE order_id = o.id
ORDER BY id DESC
LIMIT 1
)CurrState
FROM Orders o, Customer_Details cd
WHERE o.customer_id = cd.id
AND (
SELECT status_id
FROM Order_Tracking
WHERE order_id = o.id
ORDER BY id DESC
LIMIT 1
) =1
ORDER BY o.order_number
下面是浏览到上述页面后 5 分钟的 CPU 使用率截图。