バージョン選択

フォーラム

メニュー

オンライン状況

69 人のユーザが現在オンラインです。 (56 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 69
もっと...

サイト内検索

質問 > フロント機能 > レスポンスを向上させるには

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
delsol
投稿日時: 2008/10/28 11:31
対応状況: −−−
半人前
登録日: 2008/7/24
居住地:
投稿: 23
レスポンスを向上させるには
お世話になります。

商品数500、カテゴリ数130(3階層)のショップをセットアップしましたが、トップを含む各ページのレスポンスが5-10秒と非常に遅い状態です。
mysqlにlog-slow-queriesをつけてクエリの状況を見ると、商品一覧取得のクエリ1つのRows_examinedが100万以上あり、これだけで5秒かかっていました。
インデックスもいろいろ試していますが効果が出ていません。
このパターンのインデックスを張ると効果的、といった何か良い対策がありましたらお教えください。

環境は以下の通りです。
[EC-CUBE] 2.1.2
[サーバ] 単独
[OS] CentOS5
[PHP] PHP 5.1.6
[データベース] MySQL 5.0.45
[WEBサーバ] apache2.2.3
[ブラウザ] IE7

よろしくお願いいたします。
delsol
投稿日時: 2008/10/28 11:58
対応状況: −−−
半人前
登録日: 2008/7/24
居住地:
投稿: 23
Re: レスポンスを向上させるには
すみません、自己レスです。

こちらの投稿を参考にSQLを差し替えたところ、Rows_examinedが2万程度に減りレスポンスも劇的に改善しました。

http://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=thread&topic_id=2262&forum=3&post_id=8779#forumpost8779

お騒がせしました。ありがとうございました。

topo
投稿日時: 2008/12/13 16:16
対応状況: −−−
常連
登録日: 2008/6/11
居住地: 岡山
投稿: 64
Re: レスポンスを向上させるには
商品点数1000点越えのデータを投入して酷い速度になっていたのをこの書き込みを見て問題点を解決する事ができました。
有難うございましたm(_ _)m
topo
投稿日時: 2008/12/14 11:11
対応状況: −−−
常連
登録日: 2008/6/11
居住地: 岡山
投稿: 64
Re: レスポンスを向上させるには
データ件数が9000件とかになると前言撤回です><
やっぱり重いです^^;

以下に調査結果をまとめてみました。
何か情報をお持ちの方がいらっしゃればご提供頂ければ幸いですm(_ _)m

http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=2262&post_id=12221&order=0&viewmode=thread&pid=12220&forum=3#forumpost12221
topo
投稿日時: 2008/12/20 18:37
対応状況: −−−
常連
登録日: 2008/6/11
居住地: 岡山
投稿: 64
条件付の改善
条件付ですが速度改善できました。

今回私のやっている案件はデータ件数約1万件と多いものの、

・1商品に1カテゴリで問題ない点
・規格の概念を利用しない点

上の2点をクライアントに取り付ける事が出来たのでかなり独自路線の
カスタマイズをする事で基本1秒以内の表示を実現できました。
同じような条件の方はご参考までにどうぞ。


■1:データ更新
まず『dtb_products.category_id』しか見ないようにするのでデータを更新します。
まだ作ってませんがデータ登録のタイミングで同様の処理を書いておけばいいかな?と思っています。

引用:

update dtb_products a set a.category_id = (select max(b.category_id) from dtb_product_categories b where a.product_id = b.product_id ) ;




■2:SQL修正
data\class\pages\products\lc_page_products_list.php

・要点1
デフォルトのソート方法が異常に重いので無視。新着順とした。

・要点2
vw_products_allclassのviewが死ぬほど重いので捨てた。

・要点3
単一テーブルを見る分にはdistinctなんて必要ないので外した

・要点4
極力Joinを外して取得した結果から『(select min(product_code) ・・・』のような形とした。
dtb_products_class.product_idはユニークキーなので数があるように見えるが負荷は小さい。

引用:

//処理にかかわらずfromはこの形
$col = "T1.product_id,"
. "(select min(product_code) from dtb_products_class where product_id = T1.product_id ) AS product_code_min,"
. "(select max(product_code) from dtb_products_class where product_id = T1.product_id ) AS product_code_max,"
. "(select min(price01) from dtb_products_class where product_id = T1.product_id ) AS price01_min,"
. "(select max(price01) from dtb_products_class where product_id = T1.product_id ) AS price01_max,"
. "(select min(price02) from dtb_products_class where product_id = T1.product_id ) AS price02_min,"
. "(select max(price02) from dtb_products_class where product_id = T1.product_id ) AS price02_max,"
. "(select min(stock) from dtb_products_class where product_id = T1.product_id ) AS stock_min,"
. "(select max(stock) from dtb_products_class where product_id = T1.product_id ) AS stock_max,"
. "(select min(stock_unlimited) from dtb_products_class where product_id = T1.product_id ) AS stock_unlimited_min,"
. "(select max(stock_unlimited) from dtb_products_class where product_id = T1.product_id ) AS stock_unlimited_max,"
. "T1.del_flg,"
. "T1.status,"
. "T1.name,"
. "T1.comment1,"
. "T1.comment2,"
. "T1.comment3,"
. "T1.main_list_comment,"
. "T1.main_image,"
. "T1.main_list_image,"
. "T1.product_flag,"
. "T1.deliv_date_id,"
. "T1.sale_limit,"
. "T1.point_rate,"
. "T1.sale_unlimited,"
. "T1.create_date,"
. "T1.deliv_fee,"
. "T1.rank,"
. "T1.category_id as category_id" ;
$from = "dtb_products AS T1";

//表示順序
switch($orderby) {

//価格順
case 'price':
$order = "price02_min, product_id";
break;

//新着順
case 'date':
$order = "create_date DESC, product_id";
break;

default:
$order = "create_date DESC, product_id";
break;




■3:以下のロジックのカット

まったく使っていなくても以下のロジックが入っているだけでやたら重い事がわかった。
今回私が規格の要素を使わないのでロジックを外した。

引用:

// 規格名一覧
// $arrClassName = $objDb->sfGetIDValueList("dtb_class", "class_id", "name");
// 規格分類名一覧
// $arrClassCatName = $objDb->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name");
// 規格セレクトボックス設定
// if($disp_num == 15) {
// for($i = 0; $i < count($this->arrProducts); $i++) {
// $this->lfMakeSelect($this->arrProducts[$i]['product_id'], $arrClassName, $arrClassCatName);
// // 購入制限数を取得
// $this->lfGetSaleLimit($this->arrProducts[$i]);
// }
// }



スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,709名です
総投稿数は109,948件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1285
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.