バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > その他 > dtb_session テーブルの肥大化

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
seike
投稿日時: 2016/11/14 10:06
対応状況: −−−
常連
登録日: 2012/7/19
居住地:
投稿: 46
dtb_session テーブルの肥大化
EC-Cube バージョン 2.12.2
サーバーOS Debian wheezy
MySQL バージョン 5.5.35

dtb_session のレコード数が120万件を超えています。
EC-Cubeを立ち上げてからのレコードが残っています。

【質問1】
このテーブルのレコードは増えていくだけなのでしょうか?

【質問2】
古いレコードは削除してもいいのでしょうか・・・?

【質問3】
古いレコードを自動的に削除する機能はあるのでしょうか?

以上、よろしくお願いします。
tao_s
投稿日時: 2016/11/18 17:41
対応状況: −−−
仙人
登録日: 2008/8/20
居住地: 東京
投稿: 799
Re: dtb_session テーブルの肥大化
記憶が確かなら以前問題になったので、商品一覧の表示の時とかにGCが走ったと思います。
サイトを一旦止めて空にするのであれば問題は無いと思います。
あと、2.12系はセッションをDBに保存するんですが、それを普通にファイルに保存する様に変えても良いと思います。
あとはPHPのセッション有効期限の設定とかを確認してみてください。


----------------
EC-CUBEカスタマイズ相談してください。
緊急のEC-CUBEの障害対応
EC-CUBEカスタマイズブログ

seike
投稿日時: 2016/11/21 17:55
対応状況: −−−
常連
登録日: 2012/7/19
居住地:
投稿: 46
Re: dtb_session テーブルの肥大化
tao_s さん、回答ありがとうございます。
とりあえず、dtb_session テーブルの古いレコードを削除します。

EC-CUBE のパラメータ MAX_LIFETIME=7200
php.ini の設定は
session.gc_probability=0
session.gc_divisor=1000
session.gc_maxlifetime=1440
の設定になっています。(初期設定のままのようです)

session.gc_probability=0 になっているために、古いレコードが残っているのでしょうかねぇ・・・。
seike
投稿日時: 2016/11/23 10:19
対応状況: −−−
常連
登録日: 2012/7/19
居住地:
投稿: 46
Re: dtb_session テーブルの肥大化
php.ini の設定
session.gc_probability = 0 を
session.gc_probability = 1
にしたら、しばらくして
update_date が5時間(18,000秒)以上前の
レコード(約140万件)は消えて、100件程度になりました。

php.ini の設定 session.gc_maxlifetime=1440 と
EC-CUBE のパラメータ MAX_LIFETIME=7200 の関係は
どうなっているのでしょうか・・・?
どちらかの値が優先されるのでしょうか・・・?
468
投稿日時: 2016/11/23 21:47
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: dtb_session テーブルの肥大化
EC-CUBE のパラメータ MAX_LIFETIME=7200が優先されるようです。

/data/class/helperSC_Helper_Session.php の中に
ガーベジコレクションを実行する関数が定義されているのですが、
この中でsession.gc_maxlifetimeの値を定数MAX_LIFETIMEに置き換えて、
dtb_sessionテーブルの中身を削除しています。

function sfSessGc($maxlifetime) {
     // MAX_LIFETIME以上更新されていないセッションを削除する。
     $objQuery =& SC_Query_Ex::getSingletonInstance();
     $where = "update_date < current_timestamp + '-". MAX_LIFETIME . " secs'";
     $objQuery->delete('dtb_session', $where);
     return true;
}

この関数の実行頻度は
session.gc_probability 及び session.gc_divisor で
決まるようです。
seike
投稿日時: 2016/11/24 11:43
対応状況: −−−
常連
登録日: 2012/7/19
居住地:
投稿: 46
Re: dtb_session テーブルの肥大化
468 さん
回答いただきありがとうございました。
納得できました。

PHPのガベージコレクションが
session.gc_probability ÷ session.gc_divisor の確率(1/1000)で
起動すると
この function sfSessGc($maxlifetime) が実行されるのでしょうか・・?

EC-Cube側で、PHPのガベージコレクションが起動したイベントを
とらえているのですか・・・?
468
投稿日時: 2016/11/24 18:02
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: dtb_session テーブルの肥大化
/data/class/helperSC_Helper_Session.phpのコンストラクタにて、
session_set_save_handler関数が呼ばれています。
ここでPHPのセッションに関する動作にEC-CUBEで定義された関数を登録しているようです。

29行目付近
引用:
session_set_save_handler(array(&$this, 'sfSessOpen'),
array(&$this, 'sfSessClose'),
array(&$this, 'sfSessRead'),
array(&$this, 'sfSessWrite'),
array(&$this, 'sfSessDestroy'),
array(&$this, 'sfSessGc'));
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,883名です
総投稿数は110,000件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1295
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.