Ускорение корзины до оформления заказа и сохранения сохраненных действий

18

Я управляю несколькими магазинами Magento CE и ускоряю их кэшированием, однако корзина и оформление заказа все еще остаются медленными. У кого-нибудь есть опыт или советы по ускорению этих страниц?

Возможно, за счет оптимизации базы данных?

Некоторые запросы были выполнены при сохранении заказа из оформления заказа, которые отображаются в журнале медленных запросов на сервере, и база данных кажется узким местом.

Сандер Мангель
источник
что значит медленный? 1s? 5s? ... также предоставьте некоторые сведения о размере магазинов (количество простых продуктов, количество настраиваемых, размер таблиц sales_flat_quote * и т. д.).
FlorinelChis
Замедление составляет от 5 до 10 секунд в зависимости от загруженности магазина. Есть 50 000 простых продуктов, других типов нет. Идентификатор sales_flat_quote должен посмотреть завтра (на данный момент нет доступа)
Сандер Мангель
1
сколько правил цен в корзине у вас есть? они замедляют тележку. Также мы надеемся решить эту проблему в выпуске Service Pack, ожидаемый в первом / втором квартале 2013 года
Петр Каминский
@ macki на данный момент нет ценовых правил, спасибо за упоминание. это хорошо знать
Сандер Мангель

Ответы:

27
  1. Исходя из личного опыта, отключите модуль Mage_Rss, который заставляет «очищать кеш» 4 раза в процессе извлечения - очень дорого, если вы используете кеш файловой системы, вероятно, все еще дорого, если вы используете базу данных или memcached.

  2. Только для CE Отключить Mage_Downloadable по тем же причинам, если вы не используете загружаемый продукт, это ускорит оформление заказа и действия корзины, если в корзине несколько товаров, поскольку есть такие наблюдатели, checkout_type_onepage_save_order_afterкоторые умножают время ответа на количество элементов в корзине

  3. Подключите xhprof / xhgui и выполните профилирование.

Ральф Тис
источник
Спасибо, XHProf и XHGui звучат как хороший проект выходного дня, в который можно погрузиться
Сандер Мангель
1
Вы должны действительно попытаться дезактивировать mage_rss или комментировать его наблюдателей. ускоряет сохранение заказа немедленно
STANISLAS PIERRE-ALEXANDRE
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 в Мюнхене, немецкий:

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

Идея заключалась в том, что они помещают заказы в очередь в mongo db, если mysql-сервер свободен для их обратной записи. Но я не знаю, насколько этот проект готов. Афайк работает над всем письмом, но не надписью.

Фабиан Блехшмидт
источник
Спасибо, я на самом деле смотрю на решения NoSQL, и это может быть хорошей отправной точкой!
Сандер Мангель
2

Я не знаю вашу версию Magento CE, с которой вы боретесь. Но у меня были серьезные проблемы с производительностью моего CE 1.6.
Причина: неверные и отсутствующие индексы. Они были исправлены в CE 1.6.2.
Вы можете проверить, помогает ли это вам.
Я сократил время оформления заказа на 38 строк с 73 предметами в общей сложности с 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, действительно могут затормозить процесс цитирования), поскольку очень мало можно безопасно кэшировать.

Эндрю Какенбос
источник
Спасибо, боялся за это. Это уже выделенная установка с отдельным сервером БД. Надеюсь, они оптимизируют оформление заказа в Mage 2 :)
Сандер Мангель
1
2.0 Включает много переписываний, так что мы можем надеяться. Честно говоря, сами модели продуктов - это многое из того, что делает оформление заказа медленным - ему приходится перебирать экземпляры типов для каждого продукта при создании предложения / преобразовании в заказ, и это может быть дорогостоящим процессом.
Эндрю Какенбос
1

Может быть, посмотрите на разделение чтения и записи в вашей БД. Вам понадобится почти немедленная настройка репликации, хотя это всегда беспокоило меня, хотя у других может быть больше информации о том, как лучше настроить.

Ричард Клеверли
источник
Хм, если честно, не уверен, что это надежное решение, звучит как довольно большое изменение неполных данных. Идея действительно хорошая, хотя!
Сандер Мангель
Я согласен в определенной степени и признаю, что никогда сам этого не делал, хотя я вижу, как разные люди пишут сообщения в блогах и т. Д., Предлагая им заметное улучшение производительности. Если я смогу найти некоторые тесты и т.д., я опубликую их.
Ричард Клеверли
Спасибо, Ричард, я тоже поговорил об этом с моей хостинговой компанией. Думаю, у них гораздо больше опыта в таких вещах. Если у меня будет еще одна информация, я опубликую ее
Сандер Мангель