Przyspieszenie koszyka do kasy i zapisywanie działań zapisywania

18

Prowadzę kilka sklepów Magento CE i przyspieszam je dzięki buforowaniu, jednak wózek i kasa nadal pozostają wolne. Czy ktoś ma doświadczenie lub wskazówki dotyczące przyspieszenia tych stron?

Być może poprzez optymalizację bazy danych?

Niektóre zapytania zostały wykonane podczas zapisywania zamówienia z kasy nie pojawiają się w dzienniku powolnych zapytań na serwerze, a baza danych wydaje się być wąskim gardłem.

Sander Mangel
źródło
co oznacza slow? 1s? 5s? ... podaj także szczegółowe informacje na temat wielkości sklepów (liczba prostych produktów, liczba konfigurowalnych rozmiarów, tabele sprzedaży_płaskie_quote * i tak dalej).
FlorinelChis
Spowolnienie wynosi od 5 do 10 sekund, w zależności od tego, jak zajęty jest sklep. Istnieje 50 000 prostych produktów, żadnych innych typów. Identyfikator sales_flat_quote jutro musi sprawdzić (brak dostępu)
Sander Mangel
1
ile masz reguł ceny koszyka? spowalniają wózek. Mamy również nadzieję, że rozwiążemy ten problem w wydaniu dodatku Service Pack, oczekiwany 1/2 2 '13
Piotr Kamiński
@macki obecnie brak cen, dziękuję za wzmiankę. dobrze wiedzieć
Sander Mangel

Odpowiedzi:

27
  1. Z własnego doświadczenia wyłącz moduł Mage_Rss, który wymusza 4-krotne wyczyszczenie pamięci podręcznej podczas procesu kasowania - jest to bardzo kosztowne, jeśli używasz pamięci podręcznej systemu plików, prawdopodobnie nadal drogie, jeśli korzystasz z bazy danych lub memcached.

  2. Wyłącz tylko CE Mage_Downloadable z podobnych powodów, o ile nie korzystasz z produktu do pobrania, przyspieszy to kasę i działania w koszyku, gdy masz wiele przedmiotów w koszyku, ponieważ są obserwatorzy takich rzeczy, jak checkout_type_onepage_save_order_afterczas pomnożony przez liczbę elementów w wózku.

  3. Połącz xhprof / xhgui i zrób profilowanie.

Ralph Tice
źródło
Dzięki XHProf i XHGui brzmią jak przyjemny weekendowy projekt do zanurzenia
Sander Mangel
1
Naprawdę powinieneś spróbować dezaktywować mage_rss lub komentować jego obserwatorów. przyśpiesza natychmiastowe zapisywanie zamówień
STANISLAS PIERRE-ALEXANDRE
1
Chciałbym usłyszeć opinie z pierwszej ręki, jeśli trik wyłączający Mage_Rss działa dla OP
philwinkle
2
Chciałbym zaznaczyć, że EE wymaga Mage_Downloadable jako zależności:Module "Enterprise_PricePermissions" requires module "Mage_Downloadable
philwinkle
1
Nigdy nie zgłosiłem się i za to przepraszam. Wyłączenie Mage_Rss znacznie przyspieszyło, wyłączenie Mage_Downloadable nie spowodowało zauważalnej poprawy wydajności, ale muszę powiedzieć, że nie zrobiłem „właściwego” testu porównawczego, tylko kilka uruchomień w mojej przeglądarce.
Sander Mangel
4
  • Ustaw swoje indeksy na ręczne.
  • Wyłącz przechowywanie znaczników pamięci podręcznej

Obie te zmiany będą MASYWNIE wpływały na wydajność, ponieważ zapobiegały Magento opróżniając pamięci podręczne i ponownie indeksując za każdym razem, gdy zamówienie jest realizowane.

Kosztem jest jednak to, że zawartość może być nieaktualna - poziomy zapasów itp.

choco-loo
źródło
dzięki, wadliwe poziomy zapasów są problemem w większości sklepów. Ale źle pamiętam o sklepach bez zarządzania zapasami!
Sander Mangel
2

Jeśli chcesz rozwiązać to w sposób eksperymentalny, istnieje rozszerzenie z pierwszego hackathonu Magento w Monachium, niemiecki:

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

Kolejkują zamówienia do bazy danych mongo, pomysł polegał na tym, że jeśli serwer mysql jest wolny od obciążenia, aby je odpisać. Ale nie wiem, jak daleko ten projekt jest gotowy. Afaik zajmuje się pisaniem, ale nie pisaniem wstecz.

Fabian Blechschmidt
źródło
Dzięki, tak naprawdę szukałem rozwiązań noSQL i może to być dobry punkt wyjścia!
Sander Mangel
2

Nie znam twojej wersji Magento CE, z którą się zmagasz. Ale miałem poważne problemy z wydajnością z moim CE 1.6.
Powód: błędne i brakujące indeksy. Są one ustalone w CE 1.6.2.
Możesz sprawdzić, czy to ci pomaga.
Skróciłem czas realizacji 38 linii z 73 pozycjami łącznie z 123 sekund do 4 sekund !!!!

Oto nadchodzi:

/*!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 */;
limeks
źródło
1

Najlepszym sposobem na przyspieszenie dużych operacji na bazie danych jest posiadanie bazy danych na własnym serwerze zoptymalizowanym pod kątem korzystania z bazy danych. Niewiele można poprawić w obszarze kasowym pod względem kodu (chociaż niektóre typy produktów, takie jak Konfigurowalne, mogą naprawdę utrudnić proces wyceny), ponieważ bardzo niewiele można bezpiecznie buforować.

Andrew Quackenbos
źródło
Dzięki, bałem się o to. Jest to już dedykowana instalacja z oddzielnym serwerem DB. Miejmy nadzieję, że zoptymalizują kasy w Magie 2 :)
Sander Mangel
1
2.0 Do tej pory zawiera wiele przeróbek, więc możemy mieć nadzieję. Szczerze mówiąc, same modele produktów są tym, co sprawia, że ​​kasa jest powolna - musi iterować instancje typów dla każdego produktu podczas tworzenia oferty / konwersji na zamówienie, a to może być kosztowny proces.
Andrew Quackenbos
1

Może popatrz na podział odczytów i zapisów w swojej bazie danych. Będziesz jednak potrzebował niemal natychmiastowej konfiguracji replikacji, co zawsze mnie martwiło, chociaż inni mogą mieć więcej informacji na temat tego, jak najlepiej ją skonfigurować.

Richard Cleverley
źródło
Hm, nie jestem pewien, czy to rzetelne rozwiązanie, szczerze mówiąc, brzmi jak całkiem duża zmiana niekompletnych danych. Pomysł jest naprawdę fajny!
Sander Mangel
Zgadzam się do pewnego stopnia i przyznaję, że tak naprawdę nigdy tego nie zrobiłem, chociaż widzę, że różni ludzie piszą posty na blogach itp., Sugerując, że zauważyli znaczną poprawę wydajności. Jeśli znajdę jakieś testy porównawcze itp., Opublikuję je.
Richard Cleverley
Dzięki, Richard, mam również rozmowę na ten temat z moją firmą hostingową. Myślę, że mają dużo więcej doświadczenia z tego rodzaju rzeczami. Jeśli mam jeszcze jedną informację, opublikuję ją
Sander Mangel