バージョン選択

フォーラム

メニュー

オンライン状況

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

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
居住地: 大阪
投稿: 1433
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
居住地: 大阪
投稿: 1433
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
居住地: 大阪
投稿: 1433
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
居住地: 大阪
投稿: 1433
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ペイメント

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

統計情報

総メンバー数は20,616名です
総投稿数は83,613件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1663
4
yuh
1433
5
red
1077
6
fukap
907
7
shutta
827
8
468
805
9 ramrun 789
10
tsuji
784
11
umebius
726
12
tao_s
651
13 karin 641
14 sumida 638
15
homan
633
16 DELIGHT 571
17
patapata
502
18
flealog
483
19 tonton 436
20
ecbg
387


ネットショップの壺

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

Copyright© LOCKON CO.,LTD. All Rights Reserved.