Windowsソフト、iPhoneアプリ、ゲーム音楽素材の「Meteoric Stream」 -> 資料室 -> EC-Cube3 -> 【ECCube3】EC-Cubeでキーワード検索を高速化する方法

【ECCube3】EC-Cubeでキーワード検索を高速化する方法

EC-Cube3で、商品点数が15万件くらいあると、
キーワード検索が死ぬほど遅くて使い物にならなかったので、
高速化のメモです。

高速化に、一番効果があったもの



最初からそうしておけよ・・・って感じがしなくもないですが、
商品一覧ページのGROUP BY句に、無駄なカラムがものすごく多く並んでいるせいで、死ぬほど重いSQL文が出来上がってしまっています。

これは、以下の方法で修正できます。

/src/Eccube/Repository/ProductRepository.php:

$qb->groupBy('p');

になっている箇所を探し出して、

$qb->groupBy('p.id');

と修正すればおk。

これで、120秒かかっていたキーワード検索が、たったの2秒になりましたwww
・・・いや、今までの苦労はなんだったんでしょうね。

インデックスを見直す



EC-Cube3系は、ある程度、データベースにインデックスが貼られていますが、del_flgなど、一部インデックスが貼られていないカラムがあります。

微々たる高速化ですが、インデックスを貼ることが出来るカラムを探して、修正しておけば、少しは役に立つかも知れません。

MySQLのクエリキャッシュを利用する



まだ、MySQLのチューニングを行なっていない場合は、
クエリキャッシュを利用する事で、やや高速化に役立てる事が出来ます。

「vi /etc/my.cnf」などでMySQLの設定ファイルを開いて、

query_cache_limit=1M
query_cache_size=32M

のような形で記述し、保存して、MySQLを再起動すれば設定できます。

ただし、あくまでもキャッシュですので、
キャッシュが効いていない時は効果がありません。



実際に実行されているSQL文を確認する方法


EC-Cubeの場合、どのようなSQL文が実際に吐き出されているかの確認に、困る事があります。

筆者は、以下の方法で、確認しました。

まず、「vi /etc/my.cnf」などでMySQLの設定ファイルを開き、

general_log=1
general_log_file="/var/log/mysql/sql.log"
log_output=FILE

のような形で、ログファイルを吐き出すように設定を行います。
この時、sql.logのパーミッションに注意します。

mysqldから、sql.logにファイル書き込みが出来る必要がありますので、chmodなどで、ファイル書き込み権限を与えておきます。

MySQLを再起動すると、設定が有効になり、実行されたSQL文がログに出力されて行きます。

ただし、このままだと、ログファイルが膨大になってしまう可能性があるため、不要であれば、「#」などでコメントアウトしておきましょう。

EC-Cube3系のキャッシュ機能を利用する



※以下の項目は、バグが起きるため、結局利用しなくなりました。
これって結局、ちゃんとキャッシュが働いているのか微妙なところですが、せっかくなので設定しておきます。

「/app/config/eccube/doctrine_cache.yml」と、「/app/config/eccube/http_cache.yml」を新規作成して、それぞれに以下のような形で記述します。

/app/config/eccube/doctrine_cache.yml:

doctrine_cache:
metadata_cache:
driver: array
path:
host:
port:
password:
query_cache:
driver: array
path:
host:
port:
password:
result_cache:
driver: array
path:
host:
port:
password:
lifetime: 3600
clear_cache: true
hydration_cache:
driver: array
path:
host:
port:
password:


/app/config/eccube/http_cache.yml:

http_cache:
enabled: true
age: 10
# フロントでキャッシュを適用させる画面のrouteを設定
route:
- homepage
- product_list
- block_category
- block_news
- block_search_product
- help_about
- help_guide
- help_privacy
- help_tradelaw
- help_agreement


この記事の最終更新日:2018/05/11
最初に記事を書いた日:2018/05/09

この記事をシェアする

このエントリーをはてなブックマークに追加

関連記事

Meteoric Streamについて

管理人

Windowsソフト、iPhoneアプリ、ゲーム音楽素材の「Meteoric Stream」 -> 資料室 -> EC-Cube3 -> 【ECCube3】EC-Cubeでキーワード検索を高速化する方法