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


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

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


Хм, если честно, не уверен, что это надежное решение, звучит как довольно большое изменение неполных данных. Идея действительно хорошая, хотя!
Сандер Мангель

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

Спасибо, Ричард, я тоже поговорил об этом с моей хостинговой компанией. Думаю, у них гораздо больше опыта в таких вещах. Если у меня будет еще одна информация, я опубликую ее
Сандер Мангель
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.