重い osCommerce と MySQL を 高速化
もう少しで2008年も終わろうという頃、
長年お世話になっているお客様から電話があった。
osCommerceがここ何週間か非常に重くて1日に何度も画面が表示できないことがあるという。
topコマンドで確認してみるとMySQLが常に一番上に居座っている状態。
アクセス数などを確認してみたがそちらは問題ない状況だった。
MySQLにslowlogを設定して確認してみたところ、ある処理に12秒もかかっていた。
問題のテーブルを確認するとインデックスがない。
インデックスを追加すると、負荷は半分ほど低下した。さらに処理速度を確認しながら別のテーブルにもインデックスを追加した。その後に、テーブルを最適化したり、MySQLの設定をチューニングしたら、見違えるほど高速になった。レンタルサーバには使用していないアプリが動作していることがある。このサーバでもTomcatが動作していて、メモリを無駄に使っていたのでそちらを停止して、MySQLに余分に割り当てた。
ハードを上位機種にするとそれだけでも高速になるので、このチューニングは無駄だと考えられるお客様が多いが、チューニングは必要だと実感した。
今回、問題になったのは注文関係のテーブルだ。
長年、osCommerceで営業を続け、ある程度の売上がコンスタントにあるサイトだったため、注文関連テーブルに保存されたデータ量が膨大になりとうとう限界がきたということだと思う。
考えてみれば当たり前のことだが、予想外な原因で驚いた。
(also_purchased_products.phpで商品を表示して、ページキャッシュを使用していないとさらに遅くなります。 2009/01/26追加)
MySQLのパフォーマンスチューニングは面白いですね。
作業のご依頼があれば喜んでお引き受けします。
詳細を教えていただければお見積もりいたします。
(何件かお問い合わせをいただいています。ありがとうございます。 2009/01/26追加)
というわけで、
今年もよろしお願いします。
トラックバック URL :
コメント (0)