私は本業の Web デザイナーなので、知識不足をお詫びし、提供できる参考資料をいただければ幸いです。
これが状況です。当社には、社内で使用する Web アプリケーションのコレクションがあり、PHP と MySQL で構築されています。それらをホストゲーター専用サーバー (4 コア 4GB RAM) でホストしました。
最近、経営陣がサーバーを自宅 (英国) の近くに移動したいと考えたため、Heart Internet Hybrid Server (12 コア & 28GB RAM) を購入することにしました。
転送が完了し、静的ページと単純なクエリ ページの速度が大幅に向上したことは間違いありません。
ただし、多数のレコード (10,000 以上以上) を反復するページにアクセスしようとすると、ページがロードされロードされます....そして WHM では、「現在のプロセス」の下でサーバー CPU が制御不能になっていることがわかります。 、低い 20% から始まり、200% 以上まで増加します!
クエリが見事に設計されていないことはわかっています (内部選択の使用が不適切であるなど)。場合によっては、インデックスの使用を改善してこれを修正しようとしましたが、パフォーマンスが向上した場合もあります。しかし、Web アプリケーションは非常に大きいため、不適切な SQL を書き直してパフォーマンスを改善するには時間がかかりすぎます。
クエリは以前のサーバーで機能していましたが、少し遅かったため、これはサーバーの構成ミスである可能性が高いと思われます。これの別の考えられる原因は、以前のサーバーで構築されたある種のキャッシュですが、新しいサーバーにはないため、当然「作成」に時間がかかります。
以下は、新しいサーバーではハングしているが、古いサーバーではハングしていないクエリの 1 つの例です (約 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 使用率のスクリーンショットです。