EC-CUBE2系で商品を大量にカートに入れると注文情報が抜けたりカートが消えたりする
EC-CUBE2系でMySQLを使用しているシステムでは、カートに数十個を超えるような沢山の商品を入れると、カートの情報が消えたりします。
また少し多い数の商品をカートに入れて注文するだけでも、受注メールが送信されるにもかかわらず、送料計算ができなくなったり管理画面で受注データが見れないなどの障害が発生します。
EC-CUBE2では、セッション情報をDBに保存していますが、セッションの格納されるカラムの最大サイズをオーバーしてデータが欠損するためです。
セッションの格納されるカラムの型はtext型で、MySQLのtext型の最大文字数は65,535バイトです。
カートに商品を入れると、カートに入れた商品の情報がセッションに保存されます。
カートに入れる商品数が多く、DBに保存しきれなくなると、まずセッション情報の入りきれない部分が欠落した状態でDBに保存され、その後セッション情報が消えるためカート情報が消えます。
注文画面では、カートの商品情報に加え、送料を計算するための商品詳細情報と注文情報が含まれるため、カートよりもデータ欠損するまでの商品数が少なくなります。
また注文情報はカート情報の後に追記され、セッション情報が消えるときは末尾から消えるため、注文関連の情報が欠損しやすくなります。
PostgreSQLでは、text型の最大長は1GBのためこの障害はあまり発生しません。
解決方法
この障害を回避する対策は、セッションの格納されるカラムをtext型からサイズの大きいmediumtext型やlongtext型にします。
セッション情報が格納されるカラムは、セッションデータテーブルのdtb_sessionだけでなく注文一時情報テーブルのdtb_order_tempにもあります。
alter table dtb_session modify sess_data mediumtext; alter table dtb_order_temp modify session mediumtext;
MySQLのtext型
型 | サイズ |
---|---|
TINYTEXT | 最長255 バイト |
TEXT | 最長65,535 バイト(64KB) |
MEDIUMTEXT | 最長16,777,215 バイト(約1.6MB) |
LONGTEXT | 最長4,294,967,295 バイト(約4.3GB) |
EC-CUBE2のセッションの扱いは、排他処理がされていないなど様々な問題があります。
またEC-CUBEはPostgreSQLを主にして作成されているようで、MySQLで無改造で使用するにはインデックスの考慮が足りなかったりしてサイト規模が大きいとトラブルが発生しやすくなります。
関連記事
- PostgreSQLでERROR: duplicate key value violates unique constraint "hoge_pkey" DETAIL: Key (id)=(10) already exists.と出る場合
- PostgreSQLで自動採番をするシーケンス(sequence)とは【AUTO INCREMENT】
- EC-CUBEのダウンロードページ(過去のバージョン)
- 新規ページを追加するとSC_Utils_Ex::sfChangeCheckBox()のエラーが出るときの対処法
- PostgreSQLからMySQL、MySQLからPostgreSQLの変更
- EC-CUBEのサーバ移行の方法
- EC-CUBEのバックアップ機能とリストア
- EC-CUBEでMySQLデータベースのデータ取得で文字化けするときの対処法
- ページごとのスタイルシート、JavaScriptを指定する方法
- テンプレートの編集
- カテゴリ名など文字列を丸めると文字化けする EC-CUBEのバグ
- 基本的な特徴
- DB設計を見直してEC-CUBEを高速化する
- 郵便番号データの登録/更新
- インストール 初期設定
- EC-CUBE
- PHP
- MySQL MariaDB
- failed: No space left on device
- zend_mm_heap corrupted とは
- date.timezoneを設定するとPHPが早くなる
- MySQLのソケットエラー
- quoted-printable文字列の変換
- forとforeachの速度比較
- ユーザーエージェントからのキャリア、世代判別
- SSL(HTTPS)でファイルのダウンロードができない場合
- <docomo>タグ、<au>タグ、<softbank>タグの使用例
- クラスとオブジェクト
- PHPでfacebookのフィード(ウォール)に投稿する方法
- Zend_DBのSELECTメソッドのまとめ
- 携帯電話端末の判別ライブラリ Net_UserAgent_Mobile
- PHPをyumでインストールする
スポンサーリンク