サイトが激重。異常なクエリ数。 問題個所追跡方法につきまして  【解決済み】

困った時はこちらで質問してください。回答を担当する人は特に決まっていませんので、分かる方は回答をお願いします。
アバター
NeedHelp

サイトが激重。異常なクエリ数。 問題個所追跡方法につきまして  【解決済み】

投稿記事by NeedHelp » 2008/10/31 01:41

お忙しいところ、こちらの投稿に目を通して頂きましてありがとうございます。

とあるzencartサイトが重いので原因を調査しています。
判っている事は、
v1.2xで、かなりのカスタマイズをかけています。
?サイト全体が重い
?product_listingにleft join も含めて4つのテーブルをリレーションして
 クエリを行っている個所があり、ここの処理は重そうです。
具体的には、zen_products_to_categories からカテゴリIDに対応する
 product_idを全て取得し、zen_product , zen_product_discription
ともう一つのテーブルをleft joinし、3つのテーブルからデータを取得する作業を
 1クエリで行っています。

?Parse Time: 1.309 - Number of Queries: 2501 - Query Time: 0.925135765991
product_listingのページで上記のクエリ数が発生していて異常と思われます。
他のページでも平均1000回を越えていて、サイト全体で無駄なクエリを多数行っている印象があります。

推測
?の処理は若干重そうだけど、全体に影響を与えるほどかは疑問。
カテゴリIDに対応するproduct_id全てに対してforeachで処理を都度対応した
場合とどちらが速いか?1クエリの負荷の方が軽いケースもあるかもしれません。
現在、コード変更して調査中です。
 
?クエリ回数がどこで多くなってるのか追跡が間に合いません。
 classes/db/mysqlのquery_factory.phpのfunction Executeに対して
 $zc_sqlを全てerror_logしてみるのが定石でしょうか?

 可能性としてはDBの処理としては一回で済むものを無駄に複数回行っている、
 ですが、クエリ回数はサイト全体で多いので枝葉の一部分の変更によるものでは
 なさそうです。
 全てのクエリに対して同じ処理を無駄に重複して行っているようにも見えるのですが、どこが原因だかわかりません。
 
 もしヒント等いただければ幸いです。
 よろしくお願いいたします。
アバター
kimono
記事: 1995
登録日時: 2005/9/27 13:30
お住まい: 大阪府大阪市天王寺区上本町
連絡を取る:

Re: サイトが激重。異常なクエリ数。 問題個所追跡方法につきまして

投稿記事by kimono » 2008/10/31 10:43

こんにちわ。kimonoです :)
出来ましたら、早急に1.3系に移行することをお奨めいたします。
1.3系にするだけで相当のスピードアップが見込めます。
後は、1.3系を見習って、indexを貼ることでしょうか?
以前の私の記事などで、当時対応していたのが見れると思います。
ただ、出来るなら早く1.3系にすることはセキュリティなどの面からも、またテンプレートのxhml化などの面からも、得することは多いので、お勧めしますが :wink:
アバター
NeedHelp

Re: サイトが激重。異常なクエリ数。 問題個所追跡方法につきまして

投稿記事by NeedHelp » 2008/10/31 11:39

はじめまして^^kinomoさん。お返事頂きましてありがとうございます。

kimono さんが書きました:こんにちわ。kimonoです :)
>出来ましたら、早急に1.3系に移行することをお奨めいたします。
>1.3系にするだけで相当のスピードアップが見込めます。

ああ、1.2自体が重いんですねφ(。。)勉強になります。

>後は、1.3系を見習って、indexを貼ることでしょうか?

なるほど!
ありがとうございます。ちょっと試してみたいと思います。

>以前の私の記事などで、当時対応していたのが見れると思います。
>ただ、出来るなら早く1.3系にすることはセキュリティなどの面からも、またテンプレー>トのxhml化などの面からも、得することは多いので、お勧めしますが :wink:


そうですか~。アドバイスありがとうございます。
カスタマイズのかけ方が凄いのですが、私もそっちのほうがいいようなきがしてきました。
主と相談してみます^^。
今回は緊急案件でしたので、次回にむけて提案という形になるかもしれませんが^^
お返事真にありがとうございます。
アバター
NeedHelp

問題一部解決しました。 速度が格段に向上しました。

投稿記事by NeedHelp » 2008/11/01 05:01

kimono様。
今回は素早く的確なアドバイスを頂きましてありがとうございました。

kimonoさんの過去の投稿より(物凄い投稿数ですね!)
「XREAサーバでインストールしたのですが、表示が異常に遅いです。」
viewtopic.php?f=1&t=3835&hilit=+%E9%80%9F%E5%BA%A6

[quote="kimono"]こんにちわ。kimonoです :)
一般設定>画像の設定>画像サイズを計算するがtrueになってますと、恐ろしく時間がかかる場合があります。
あとカテゴリ内の商品数を表示させても時間がかかる場合もあります。

categoree tree の select count(*) each categories処理をスキップした結果
(管理画面>一般設定>カテゴリの商品数を表示する>trueからfalseへ変更)
した結果、かなり速度が向上しました。

この設定は、サイドボックスが表示されるページの大部分で実行され、trueの場合
クエリが「カテゴリ数×3?5?」分のクエリが「ほぼどのページアクセスにも発行される」
ようで、カットした結果、クエリータイム比で1/4,クエリー数比でも同程度の
負荷を削減できました。
体感的に劇的な変化でしたので、主も驚いて喜んでくれています。

もともと、プロファイル段階で怪しいと睨んでいた部分でして、
管理画面のクリック一発で対応できるとのkimonoさんの記事で処理スキップが
効果的であると確信できました。
画像の設定についても、効果があったようです。
kimonoさんのほかの記事も是非参考にさせていただきます。
今回はありがとうございました。
アバター
koto-tool
記事: 190
登録日時: 2008/5/11 16:03
お住まい: 滋賀県草津市
連絡を取る:

Re: サイトが激重。異常なクエリ数。 問題個所追跡方法につきまして

投稿記事by koto-tool » 2008/11/01 06:40

ここの掲示板で紹介されたのですが、

http://www.flatz.jp/archives/91

を見て少し表示速度上がった気がします。

登録商品数15000・50000のサイトを運営していますが、今のところまぁまぁな表示速度ですよ。
//////////////////////////////////////
工具の激安通販店 koto-tool.com
http://www.koto-tool.com
100円の商品でも送料無料
http://www.esco.koto-tool.com

//////////////////////////////////////
アバター
ゲスト

zencartサイト表示速度が遅い場合の対応策。スピードアップ。

投稿記事by ゲスト » 2008/11/01 23:53

koto-toolさん、お返事ありがとうございました。


>ここの掲示板で紹介されたのですが、

>http://www.flatz.jp/archives/91

>を見て少し表示速度上がった気がします。

ありがとうございます。
こちらの記事は、私のプロファイリングと大体同じ内容でした。

DBキャッシュをtrueにする。
価格情報取得>zen_get_products_display_priceを外す、または独自に制作
前の商品・次の商品 これははじめて知りました。
indexの追加

私の印象では、カテゴリの商品数表示のfalse化、価格情報取得の不使用、
または関数独自作成が、クエリ発行回数からしてみても、
速度改善の2TOPに思えます。その上で
キャッシュの利用及びINDEXの追加によるチューンが効くと思うのですが、

カテゴリ商品表示とzen_get_products_display_priceのズサンな設計は
ちょっと呆れました。商品数やカテゴリ数によって爆発的にmysqlの負荷が増えるようになっています。
v1.2は自分的にはβ扱いですねこりゃ。
300以上のcount(category)リクエストを見てコーヒー吹きました。

何はともあれ、ご指摘ありがとうございます。

もし、速度向上に関する情報等ございましたらどなた様でもこちらにご連絡頂ければ幸いです。
アバター
さいきゆみ
記事: 57
登録日時: 2008/6/26 12:57
お住まい: 大阪府高槻市
連絡を取る:

ここを読んでやってみました。軽いです

投稿記事by さいきゆみ » 2009/2/09 22:30

すでに1.3を使っています。
プログラムまでさわる勇気なかったのですが、
画像サイズを計算というのをfalseにしたら確かに軽くなった気がします。

ただ、拡大表示をクリックしたら、実際より小さく表示されてしまいます。

そこで勇気を出して最少画像の縦横のサイズをautoにしてみました。

エラーは今のところ出ていません。

いい感じのような気がします。
最後に編集したユーザー さいきゆみ on 2009/2/10 18:17 [ 編集 1 回目 ]
今日も勉強しました!”
登れない山はない
http://yumisaiki.blogspot.com/
アバター
kino
記事: 893
登録日時: 2005/5/15 19:39
お住まい: 京都
連絡を取る:

Re: zencartサイト表示速度が遅い場合の対応策。スピードアップ。

投稿記事by kino » 2009/2/10 07:41

ゲスト さんが書きました:キャッシュの利用及びINDEXの追加によるチューンが効くと思うのですが、

カテゴリ商品表示とzen_get_products_display_priceのズサンな設計は
ちょっと呆れました。商品数やカテゴリ数によって爆発的にmysqlの負荷が増えるようになっています。
v1.2は自分的にはβ扱いですねこりゃ。
300以上のcount(category)リクエストを見てコーヒー吹きました。


MySQLのクエリーキャッシュの設定を有効にするだけでも
劇的に上がりますが

http://zen-cart.jp/bbs/viewtopic.php?f=2&t=3311&p=16307&hilit=SQL+INDEX#p16307

1.2時代に INDEXの追加のSQLを投稿していた記事が有ったので
参考にして見て下さい。

管理画面の sqlpatch で実行すればいい筈です。
-----
木下 敏夫
http://www.tktools.jp/

大阪府産業デザインセンターデザイン専門員 ( http://bmb.oidc.jp/index.php?topic=-m-D14 )
奥様ショップ 店長 ( http://okusama-shop.com/ )
電脳ドロップシッピング 店長 ( http://d-064.d-shipping.net/ )
アバター
kino
記事: 893
登録日時: 2005/5/15 19:39
お住まい: 京都
連絡を取る:

Re: zencartサイト表示速度が遅い場合の対応策。スピードアップ。

投稿記事by kino » 2009/2/10 08:00

木下です。

それ以外のチューニングとしては
http://zen-cart.jp/bbs/viewtopic.php?f=4&t=2218&p=11753&hilit=mysql+query#p11753

それ以外は apache の設定で keepalive を On にして
その代わりに kieepalive の timeout を 1 にするとか
http://zen-cart.jp/bbs/viewtopic.php?f=7&t=3928&p=19212&hilit=apache+keep#p19212

サーバーの管理権限があれば1.2でも可也の高速化は可能ですが
根本的には1.3にするほうがいいと思います。

でも、もう直ぐ2.0が出るようでその場合可也の修正を行わないと
既存のカスタマイズは動作しないようなので、今の時期なら
外部に依頼してVerUPする必要があるのならそこまで待つ
というのも検討の候補に上げた方がいいかも。
-----
木下 敏夫
http://www.tktools.jp/

大阪府産業デザインセンターデザイン専門員 ( http://bmb.oidc.jp/index.php?topic=-m-D14 )
奥様ショップ 店長 ( http://okusama-shop.com/ )
電脳ドロップシッピング 店長 ( http://d-064.d-shipping.net/ )
アバター
mmochi
記事: 328
登録日時: 2006/9/04 12:53
お住まい: 静岡県静岡市
連絡を取る:

Re: サイトが激重。異常なクエリ数。 問題個所追跡方法につきまして

投稿記事by mmochi » 2009/2/24 11:38

mmochiです。

ちょっと面白いモジュールを見つけました。
ZenCartはインストール時にsqlキャッシュを使うか否かの設定が出来ますが、選択肢は3つあります。

・なし
・ファイル
・DB

ファイルの場合でもDBの場合でもそれぞれにアクセスするIOが発生するわけですが、このキャッシュをメモリ上に格納するモジュールがあります。

#1.2には対応していないのですがトピック名にはバージョンに関する記載が無いのでここに書いておこうかと。

で、肝心のモジュールですが本家で公開されている Query Cache というものです。
http://www.zen-cart.com/index.php?main_page=product_contrib_info&cPath=40_47&products_id=1233

私のブログでも取り上げましたがかなりの高速化が図れました。
DBにキャッシュする場合と比較して、発行するクエリ数は半分以下になりました。
説明文でもそう謳われていますが実測で確認しました。
http://www.andplus.net/index.php?itemid=601&catid=36

クエリの改善や、mysqlのチューニングが出来ない方には重宝するのではないかと思います。
mmochi
ブログ http://blog.andplus.net/
株式会社あんどぷらす http://www.andplus.net/
アバター
kimono
記事: 1995
登録日時: 2005/9/27 13:30
お住まい: 大阪府大阪市天王寺区上本町
連絡を取る:

Re: サイトが激重。異常なクエリ数。 問題個所追跡方法につきまして

投稿記事by kimono » 2009/2/24 12:42

こんにちわ。kimonoです :)
これはこれは!
いい情報大変有難うございますm(__)m
うちでも今度実験してみようと思います><

ちなみに、うちのサーバーは、mysqlのチューニングも行なっているので、ぶつかってしまう可能性もあるかもしれないですね><

“Zen Cart 質問コーナー” へ戻る