2

私は本業の 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 使用率のスクリーンショットです。

高い CPU 使用率

4

1 に答える 1

0

v.5.6では、MySQLでサポートされていないDESC順序付けを使用しています。

13.1.11。CREATEINDEX構文

そして、重いDISTINCT操作には一時的なテーブルが必要なようです。

8.13.15。DISTINCT最適化

したがって、これはサーバー構成とは関係のないクエリとスキーマの最適化問題です。

したがって、クエリは次のようになります。

SELECT 
  Orders.order_number,
  Orders.customer_id,
  Orders.order_date,
  CONCAT(Customer_Details.customer_fname,  ' ', Customer_Details.customer_lname) AS CustomerName, 
  status_id AS CurrState
FROM Orders 
INNER JOIN Customer_Details
ON(Orders.customer_id = Customer_Details.id)
INNER JOIN Order_Tracking
ON(Orders.id = Order_Tracking.order_id)
INNER JOIN (SELECT order_id, MAX(id) id FROM Order_Tracking GROUP BY order_id) LastOrderTracking
ON (Order_Tracking.id = LastOrderTracking.id)
WHERE status_id = 1
ORDER BY Orders.order_number;

ライブデモを見て、実行プランに存在するファイルソート操作の数を確認できます。

于 2013-03-16T21:05:50.277 に答える