バージョン選択

フォーラム

メニュー

オンライン状況

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

PR

デザインテンプレート EC-CUBE3.0版が登場!
広告掲載について

サイト内検索

質問 > 管理機能 > 商品登録時にタイムアウトしてしまう。

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
saifis
投稿日時: 2017/3/2 13:05
対応状況: −−−
新米
登録日: 2017/3/2
居住地:
投稿: 7
商品登録時にタイムアウトしてしまう。
▼テンプレート
[EC-CUBE] 2.13.1 2013年末より稼働
[レンタルサーバ] さくらインターネット
[OS] CentOS 6
[PHP] 5.4.45
[データベース] MySQL 5.5.54-log
[WEBサーバ]
[ブラウザ]
[導入プラグインの有無] PGマルチペイメントサービス 決済補助機能プラグイン 1.3
[カスタマイズの有無] CSSやストアサイドでの軽微なデザイン変更
[現象] 商品の情報の操作中にタイムアウトし、一時DBのデッドロックが発生、さくらインターネットに問い合わせなどしてDBデッドロックは解消したものの、
以降商品の追加や変更を行おうとすると、応答がなくなり、最終的にPHP側のタイムアウトエラーになります。

Debugモードで出るエラーは以下のとおりです。

Fatal error(E_ERROR): Maximum execution time of 30 seconds exceeded on [/home/xxxxxxxxxxx/www/ec_cube/data/module/PEAR.php(671)]

登録商品数は2400前後ありますが、現象が起きるまでは特に操作が遅い、ということはなかったようです。

既にかなり古いパージョンを使用していることもあり、バージョンアップ等したほうが良いのかもしれませんが、現状で何かできることはないでしょうか?
yuh
投稿日時: 2017/3/2 13:39
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1372
Re: 商品登録時にタイムアウトしてしまう。
おそらくカテゴリの集計部分だとは思いますが、一旦
DBログの方を確認した方がいいかと思います。

フロント側でカテゴリ数の表示(食べ物(32)の32の部分)を使用していないのであれば、その部分の集計を使用しないようにして負荷を下げる方法と、集計部分のクエリを調整して対応する方法があるかと思います。


----------------
ec-cube2系の速度UPしてみました。(商品数:100万件)
http://speedtest2.ec-lab.net/products/list.php?category_id=15
ec-cube2系最速!(自称)

saifis
投稿日時: 2017/3/2 14:15
対応状況: −−−
新米
登録日: 2017/3/2
居住地:
投稿: 7
Re: 商品登録時にタイムアウトしてしまう。
返信ありがとうございます。DBログについて、レンタルサーバのため取得に手間取りそうですが、やってみます。集計に関してですが、ストアサイトの方で使用しているため取り除くのは困難です。

ただ、ストア側でのカウントに影響はないように見えます。1500件などに大きな影響がないように見えます。

また、再度確認したところ、商品の複製はタイム・アウトするものの成功、削除は同じくタイムアウトで削除されない、ということが確認できました。
yuh
投稿日時: 2017/3/2 14:26
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1372
Re: 商品登録時にタイムアウトしてしまう。
管理画面からDBのログ確認できますよー


----------------
ec-cube2系の速度UPしてみました。(商品数:100万件)
http://speedtest2.ec-lab.net/products/list.php?category_id=15
ec-cube2系最速!(自称)

saifis
投稿日時: 2017/3/6 14:36
対応状況: −−−
新米
登録日: 2017/3/2
居住地:
投稿: 7
Re: 商品登録時にタイムアウトしてしまう。
すいません返信遅れました。おそらく最初の問題となったDBエラーはこちらです。

2月23日に起きたもので、このエラー以降商品に対する書き込み全般に問題が出ています。

[execute end 58ae3f902aa53#28]
SQL: PREPARE mdb2_statement_mysql_28aa23bc6b2cb8d33209890acddca98e8e3aaab474 FROM 'UPDATE dtb_category_count SET create_date= CURRENT_TIMESTAMP, product_count= ? WHERE category_id = ?'
PlaceHolder: array (
0 => '80',
1 => 18,
)
execution time: 50.73 sec
from xxxxxx
login_id = xxxxxxxxxxx(0)[a6rfviqb5r60j04cmdv2j8joc7]
/home/xxxxxxxx/www/ec_cube/woodyadmin/products/product.php(29): LC_Page_Admin_Products_Product_Ex->process
/home/xxxxxxxx/www/ec_cube/data/class_extends/page_extends/admin/products/LC_Page_Admin_Products_Product_Ex.php(54): LC_Page_Admin_Products_Product->process
/home/xxxxxxxx/www/ec_cube/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php(70): LC_Page_Admin_Products_Product->action
/home/xxxxxxxx/www/ec_cube/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php(169): SC_Helper_DB->sfCountCategory
/home/xxxxxxxx/www/ec_cube/data/class/helper/SC_Helper_DB.php(802): SC_Query->update
/home/xxxxxxxx/www/ec_cube/data/class/SC_Query.php(627): SC_Query->query
/home/xxxxxxxx/www/ec_cube/data/class/SC_Query.php(865): SC_Query->execute
/home/xxxxxxxx/www/ec_cube/data/class/SC_Query.php(1041): SC_Query->lfEndDbTraceLog
/home/xxxxxxxx/www/ec_cube/data/class/SC_Query.php(1188): GC_Utils->gfPrintLog


操作しているユーザーの話による、商品のカテゴリ情報をいじっている最中にタイムアウトになり、それ以降商品登録ができない状態になっています。

また、これ以降のDBエラーは出ておらず、エラーログのみです。

その後のエラーログは以下のような感じで、毎回違うところでエラーになっていて、とにかくタイム・アウトしたタイミングでエラーになるようです。Phpのタイムアウト時間を120まで上げても結局タイムアウトしてしまいます。
さくらレンタルサーバの動きを見ていると、まるで無限ループに陥ったように延々とCPUリソースを専有し、プロセスを終了するまでそのままです。
yuh
投稿日時: 2017/3/6 18:38
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1372
Re: 商品登録時にタイムアウトしてしまう。
NOSTOCK_HIDDENの設定ってどのようになっていますか?
その値によって対応するクエリが違うんですが
例えばMYSQLでNOSTOCK_HIDDENがfalseの場合は
SC_Helper_DBのsfCountCategory部分の更新のクエリが

データを取得・チェック。カテゴリ一つづつ更新
って感じで処理してるので、

-- 新規追加時用。
INSERT IGNORE INTO
dtb_category_count 
SELECT
	category_id,
	0 as product_count,
	NOW() as create_date
FROM
	dtb_category;

-- まとめて更新用	
UPDATE
	dtb_category_count
SET
	product_count = COALESCE(
	(
		SELECT
			COUNT(*) 
		FROM
			dtb_product_categories AS T2 
		WHERE
			category_id = dtb_category_count.category_id AND
			EXISTS(
				SELECT
					*
				FROM
					dtb_products
				WHERE
					product_id = T2.product_id AND
					del_flg = 0 AND 
					status = 1
			
			)
	),0);

こんな感じのクエリに変えてしまって、
最初に新規追加時のデータをまとめてINSERT。
次にすべてのカテゴリの集計をまとめて更新するようにして、
クエリ自体がちゃんとINDEX効かせてうまくいくように調整していって、
同じような感じでdtb_category_total_countにちょっと手を加えて調整を行えば
何とかなるとは思います。

Postgresqlであれば全くクエリの書き方は違いますが、方法は色々あります。


----------------
ec-cube2系の速度UPしてみました。(商品数:100万件)
http://speedtest2.ec-lab.net/products/list.php?category_id=15
ec-cube2系最速!(自称)

saifis
投稿日時: 2017/3/6 21:21
対応状況: −−−
新米
登録日: 2017/3/2
居住地:
投稿: 7
Re: 商品登録時にタイムアウトしてしまう。
ありがとうございます。確認したところTrueになっています。
yuh
投稿日時: 2017/3/6 21:46
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1372
Re: 商品登録時にタイムアウトしてしまう。
trueであれば在庫周りのクエリを追加して、INDEX効かせながら正常に動作するように調整すれば大丈夫です。


----------------
ec-cube2系の速度UPしてみました。(商品数:100万件)
http://speedtest2.ec-lab.net/products/list.php?category_id=15
ec-cube2系最速!(自称)

saifis
投稿日時: 2017/3/7 9:22
対応状況: −−−
新米
登録日: 2017/3/2
居住地:
投稿: 7
Re: 商品登録時にタイムアウトしてしまう。
丁寧にありがとうございます。
さっそく試してみて結果を報告します。
saifis
投稿日時: 2017/3/7 13:21
対応状況: −−−
新米
登録日: 2017/3/2
居住地:
投稿: 7
Re: 商品登録時にタイムアウトしてしまう。
本格的に作業できるまでちょっと時間かかりそうですが、

SC_Helper_DBのsfCountCategoryをすぐにReturn;で帰るようにしたら問題なく動くようになったので、箇所としては間違いないのではと思います。

本当にありがとうございました。
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

 



ログイン


EC-CUBEペイメント

クレジットカード情報の非保持化対応

統計情報

総メンバー数は19,664名です
総投稿数は82,195件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1632
4
yuh
1372
5
red
1059
6
fukap
907
7
shutta
827
8 ramrun 789
9
tsuji
782
10
umebius
671
11
tao_s
646
12 sumida 638
13
homan
633
14
468
630
15 karin 609
16 DELIGHT 571
17
patapata
502
18
flealog
483
19 tonton 436
20
ecbg
387


ネットショップの壺

EC-CUBEガイドブック
Copyright© LOCKON CO.,LTD. All Rights Reserved.