カートのチェックアウトおよびチェックアウト保存アクションの高速化


18

私はいくつかのMagento CEショップを運営しており、キャッシングでスピードアップしていますが、カートとチェックアウトはまだ遅いままです。これらのページを高速化するための経験やヒントはありますか?

おそらくデータベースを最適化することを通して?

チェックアウトから注文を保存するときに一部のクエリが実行され、サーバーのスロークエリログに表示され、データベースがボトルネックになっているようです。


slowはどういう意味ですか?1秒?5秒?...また、ショップのサイズに関する詳細(単純な製品の数、構成可能な数、sales_flat_quote *テーブルのサイズなど)も提供します。
FlorinelChis

遅い時間は、お店の忙しさに応じて5〜10秒です。50.000の単純な製品があり、他のタイプはありません。sales_flat_quote IDは明日検索する必要があります(現時点ではアクセス権なし)
サンダーマンジェル

1
ショッピングカートの価格ルールはいくつありますか?彼らはカートを遅くします。また、我々は期待Q1 / Q2 '13、サービスパックのリリースで、この問題に対処したいと考えています
ピョートル・カミンスキー

@macki現時点では価格ルールはありません。言及してくれてありがとう。知っておきたいこと
サンダーマンジェル

回答:


27
  1. 個人的な経験から、Mage_Rssモジュールを無効にして、チェックアウトプロセスで4回「キャッシュクリーン」を強制します-ファイルシステムキャッシュを使用している場合は非常に高価ですが、データベースまたはmemcachedを使用している場合はおそらくまだ高価です。

  2. CEはダウンロード可能な製品を使用していない限り、同様の理由でMage_Downloadable のみを無効にします。これにより、カートに複数のアイテムがある場合、チェックアウトとカートアクションが高速化されcheckout_type_onepage_save_order_afterます。カートに。

  3. xhprof / xhguiを接続して、プロファイリングを行います。


飛び込むに素敵な週末のプロジェクトなどのおかげでXHProfとXHGuiサウンド
サンダーMangel

1
本当にmage_rssを非アクティブ化するか、オブザーバーにコメントする必要があります。注文の保存をすぐに高速化
スタニスラスピエールアレキサンドル

1
Mage_Rss無効トリックはOPのために働く場合、私はじかにフィードバックを聞きたいのですが
philwinkle

2
私は、EEがあることを指摘したいと思います必要が依存関係としてMage_Downloadableを:Module "Enterprise_PricePermissions" requires module "Mage_Downloadable
philwinkle

1
私は決して報告しなかったし、そのためにすみません。Mage_Rssを無効にすると速度が大幅に向上し、Mage_Downloadableを無効にしても顕著なパフォーマンスの改善は見られませんでしたが、「適切な」ベンチマークは行わず、ブラウザーで数回実行するだけでした。
サンダーマンジェル

4
  • インデックスを手動に設定します。
  • キャッシュタグストレージを無効にする

これらの変更は両方とも、Magentoがキャッシュをフラッシュし、注文が完了するたびにインデックスを再作成することを防ぐため、パフォーマンスに大きな影響を及ぼします。

ただし、コンテンツは結果として古くなっている可能性があります-在庫レベルなど


おかげで、在庫レベルの欠陥はほとんどのショップで問題になっています。しかし、在庫管理のないお店では注意してください!
サンダーマンジェル

2

実験的な方法で解決したい場合は、ドイツのミュンヘンで最初のmagento hackathonから拡張機能があります。

https://github.com/magento-hackathon/MongoDB-OrderTransactions

mysql-serverがそれらを書き戻すための負荷がない場合、彼らは注文をmongo dbのキューに入れました。しかし、このプロジェクトの準備がどこまで進んでいるかはわかりません。Afaikはすべてのライティングを機能させますが、バックライティングは機能しません。


おかげで、私は実際にnoSQLソリューションを見ていましたが、これは良い出発点かもしれません!
サンダーマンジェル

2

苦労しているMagento CEのバージョンがわかりません。しかし、CE 1.6で深刻なパフォーマンスの問題が発生しました。
理由:インデックスが間違っているか、欠落しています。CE 1.6.2で修正された
場合、それが役立つかどうかを確認できます。
合計73行で3​​8行のチェックアウト時間を123秒から4秒に短縮しました!!!!

ここに来る:

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/* Foreign Keys must be dropped in the target to ensure that requires changes can be done*/

ALTER TABLE `core_url_rewrite` 
DROP FOREIGN KEY `FK_CORE_URL_REWRITE_CTGR_ID_CAT_CTGR_ENTT_ENTT_ID`  , 
DROP FOREIGN KEY `FK_CORE_URL_REWRITE_STORE_ID_CORE_STORE_STORE_ID`  ;


/* Alter table in target */
ALTER TABLE `catalog_category_entity_varchar` 
DROP KEY `MAGMI_CCEV_OPTIMIZATION_IDX` ;


/* Alter table in target */
ALTER TABLE `catalog_product_bundle_stock_index` 
DROP KEY `PRIMARY`, ADD PRIMARY KEY(`entity_id`,`website_id`,`stock_id`,`option_id`) ;


/* Alter table in target */
ALTER TABLE `catalog_product_entity_media_gallery` 
DROP KEY `MAGMI_CPEM_OPTIMIZATION_IDX` ;


/* Alter table in target */
ALTER TABLE `core_url_rewrite` 
CHANGE `id_path` `id_path` varchar(255)  COLLATE utf8_general_ci NULL COMMENT 'Id Path' after `store_id` , 
CHANGE `request_path` `request_path` varchar(255)  COLLATE utf8_general_ci NULL COMMENT 'Request Path' after `id_path` , 
CHANGE `target_path` `target_path` varchar(255)  COLLATE utf8_general_ci NULL COMMENT 'Target Path' after `request_path` , 
CHANGE `is_system` `is_system` smallint(5) unsigned   NULL DEFAULT 1 COMMENT 'Defines is Rewrite System' after `target_path` , 
CHANGE `options` `options` varchar(255)  COLLATE utf8_general_ci NULL COMMENT 'Options' after `is_system` , 
CHANGE `description` `description` varchar(255)  COLLATE utf8_general_ci NULL COMMENT 'Deascription' after `options` , 
CHANGE `category_id` `category_id` int(10) unsigned   NULL COMMENT 'Category Id' after `description` , 
CHANGE `product_id` `product_id` int(10) unsigned   NULL COMMENT 'Product Id' after `category_id` , 
ADD KEY `FK_CORE_URL_REWRITE_PRODUCT_ID_CATALOG_CATEGORY_ENTITY_ENTITY_ID`(`product_id`) , 
DROP KEY `FK_CORE_URL_REWRITE_PRODUCT_ID_CATALOG_PRODUCT_ENTITY_ENTITY_ID` , 
ADD CONSTRAINT `FK_CORE_URL_REWRITE_PRODUCT_ID_CATALOG_CATEGORY_ENTITY_ENTITY_ID` 
FOREIGN KEY (`product_id`) REFERENCES `catalog_product_entity` (`entity_id`) ON DELETE CASCADE ON UPDATE CASCADE , 
DROP FOREIGN KEY `FK_CORE_URL_REWRITE_PRODUCT_ID_CATALOG_PRODUCT_ENTITY_ENTITY_ID`  ;


/* Alter table in target */
ALTER TABLE `eav_attribute` 
DROP KEY `MAGMI_EA_CODE_OPTIMIZATION_IDX` ;


/* Alter table in target */
ALTER TABLE `eav_attribute_option_value` 
DROP KEY `MAGMI_EAOV_OPTIMIZATION_IDX` ;


/* The foreign keys that were dropped are now re-created*/

ALTER TABLE `core_url_rewrite` 
ADD CONSTRAINT `FK_CORE_URL_REWRITE_CTGR_ID_CAT_CTGR_ENTT_ENTT_ID` 
FOREIGN KEY (`category_id`) REFERENCES `catalog_category_entity` (`entity_id`) ON DELETE CASCADE ON UPDATE CASCADE , 
ADD CONSTRAINT `FK_CORE_URL_REWRITE_STORE_ID_CORE_STORE_STORE_ID` 
FOREIGN KEY (`store_id`) REFERENCES `core_store` (`store_id`) ON DELETE CASCADE ON UPDATE CASCADE ;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

1

大規模なデータベース操作を高速化する最良の方法は、データベースの使用に最適化された独自のサーバーにデータベースを配置することです。コード単位でチェックアウト領域に改善できるものはほとんどありません(ただし、Configurableなどの特定の種類の製品は、引用プロセスを完全に停止させる可能性があります)。


ありがとう、それが怖かった。これは、すでに別個のDBサーバーを使用した専用インストールです。願わくば、彼らがMage 2のチェックアウトを最適化してくれることを願っています:)
サンダーマンジェル

1
2.0はこれまで多くの書き直しを含んでいるので、期待できます。正直なところ、製品モデル自体がチェックアウトを遅くする要因の多くです-注文への見積もり/変換を作成している間、各製品の型インスタンスを反復処理する必要があり、それは高価なプロセスになる可能性があります。
アンドリュークアッケンボス

1

DBで読み取りと書き込みを分割することを検討してください。すぐにレプリケーションをセットアップする必要がありますが、これは常にそれを行うことで私を心配しているものですが、他の人がそれを設定する最善の方法についての詳細を持っているかもしれません。


正直に言うと信頼できるソリューションであるかどうかはわかりませんが、不完全なデータのかなり大きな変化のように聞こえます。アイデアは本当に素晴らしいです!
サンダーマンジェル

ある程度は同意しますが、実際に自分でやったことはありませんが、さまざまな人がブログ投稿などを書いて、パフォーマンスが著しく向上したことを示唆しているのを見ています。ベンチマークなどを見つけることができたら、それらを投稿します。
リチャードクレバリー

リチャードに感謝します。これについては、ホスティング会社とも話をします。彼らは私が思うこの種のことでもっと多くの経験を持っています。私は1つのより多くの情報を持っている場合、私はそれを投稿します
サンダーMangel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.