Beschleunigung der Aktionen zum Speichern des Warenkorbs zum Auschecken und Auschecken


18

Ich betreibe mehrere Magento CE-Shops und beschleunige sie durch Zwischenspeichern. Der Warenkorb und die Kasse sind jedoch weiterhin langsam. Hat jemand Erfahrung oder Tipps zur Beschleunigung dieser Seiten?

Vielleicht durch die Optimierung der Datenbank?

Einige Abfragen, die beim Speichern einer Bestellung aus dem Checkout durchgeführt wurden, werden im langsamen Abfrageprotokoll auf dem Server angezeigt, und die Datenbank scheint der Engpass zu sein.


Was bedeutet langsam? 1s? 5s? ... machen Sie auch Angaben zur Größe der Shops (Anzahl der einfachen Produkte, Anzahl der konfigurierbaren, Größe der sales_flat_quote * -Tabellen usw.).
FlorinelChis

Langsam ist zwischen 5 und 10 Sekunden, je nachdem, wie beschäftigt der Laden ist. Es gibt 50.000 einfache Produkte, keine anderen Typen. Die sales_flat_quote-ID muss morgen nachschlagen (derzeit kein Zugriff)
Sander Mangel

1
Wie viele Warenkorb-Preisregeln haben Sie? sie verlangsamen den Wagen. Wir hoffen auch, dieses Problem in der Service Pack-Version
Piotr Kaminski

@macki im Moment keine Preisregeln, danke für die Erwähnung tho. das ist gut zu wissen
Sander Mangel

Antworten:


27
  1. Deaktivieren Sie aus persönlicher Erfahrung das Mage_Rss-Modul, das eine viermalige Cache-Bereinigung beim Auschecken erzwingt - sehr teuer, wenn Sie den Dateisystem-Cache verwenden, wahrscheinlich immer noch teuer, wenn Sie eine Datenbank oder einen Speicher verwenden.

  2. Nur CE Deaktivieren Sie Mage_Downloadable aus ähnlichen Gründen, solange Sie das Produkt Downloadable nicht verwenden. Dies beschleunigt die Checkout- und Warenkorbaktionen, wenn sich mehrere Artikel im Warenkorb befinden, da Beobachter beispielsweise checkout_type_onepage_save_order_afterdie Antwortzeit mit der Anzahl der Artikel multiplizieren im Wagen.

  3. Verdrahten Sie xhprof / xhgui und erstellen Sie ein Profil .


Dank XHProf und XHGui klingt nach einem schönen Wochenendprojekt zum Eintauchen
Sander Mangel

1
Sie sollten wirklich versuchen, mage_rss zu deaktivieren oder seine Beobachter zu kommentieren. beschleunigt Bestellung sofort speichern
STANISLAS PIERRE-ALEXANDRE

1
Ich würde gerne Feedback aus erster Hand hören, wenn der Mage_Rss-Deaktivierungstrick für das OP
funktioniert

2
Ich möchte darauf hinweisen , dass EE erfordert Mage_Downloadable als Abhängigkeit:Module "Enterprise_PricePermissions" requires module "Mage_Downloadable
philwinkle

1
Ich habe mich nie gemeldet und das tut mir leid. Durch das Deaktivieren von Mage_Rss wurde die Geschwindigkeit erheblich gesteigert, und durch das Deaktivieren von Mage_Downloadable wurden keine nennenswerten Leistungsverbesserungen erzielt. Ich muss jedoch sagen, dass ich keinen "richtigen" Benchmark durchgeführt habe, sondern nur mehrere Läufe in meinem Browser.
Sander Mangel

4
  • Stellen Sie Ihre Indizes auf manuell ein.
  • Deaktivieren Sie den Cache-Tag-Speicher

Beide Änderungen haben einen MASSIVEN Einfluss auf die Leistung, da Magento verhindert, dass Caches geleert und jedes Mal neu indiziert werden, wenn ein Auftrag ausgeführt wird.

Es ist jedoch mit Kosten verbunden, dass der Inhalt als Ergebnis veraltet sein kann - Lagerbestände usw.


danke, die fehlerhaften Lagerbestände sind ein Problem in den meisten Läden. Beachten Sie dies jedoch nicht für Geschäfte ohne Lagerverwaltung!
Sander Mangel

2

Wenn Sie es auf experimentelle Weise lösen möchten, gibt es eine Erweiterung des ersten Magento-Hackathons in München:

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

Sie stellen die Bestellungen in eine Mongo-Datenbank, die Idee war, ob der MySQL-Server frei ist, um sie zurückzuschreiben. Aber ich weiß nicht, wie weit dieses Projekt ist. Afaik bearbeitet das gesamte Schreiben, jedoch nicht das hintere Schreiben.


Danke, ich habe mir eigentlich noSQL-Lösungen angeschaut und dies könnte ein guter Ausgangspunkt sein!
Sander Mangel

2

Ich kenne Ihre Magento CE-Version nicht, mit der Sie zu kämpfen haben. Ich hatte jedoch schwerwiegende Leistungsprobleme mit meinem CE 1.6.
Grund: Falsche und fehlende Indizes. Sie wurden in CE 1.6.2 behoben.
Sie können prüfen, ob dies hilfreich ist.
Ich habe die Checkout-Zeit für 38 Zeilen mit insgesamt 73 Artikeln von 123 auf 4 Sekunden reduziert !!!!

Hier kommt es:

/*!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

Der beste Weg, um die großen Datenbankoperationen zu beschleunigen, besteht darin, Ihre Datenbank auf einem eigenen Server zu haben, der für die Datenbanknutzung optimiert ist. Es gibt nicht viel, was im Checkout-Bereich in Bezug auf den Code verbessert werden kann (obwohl bestimmte Produkttypen, wie z. B. Konfigurierbar, den Angebotsprozess erheblich beeinträchtigen können), da nur sehr wenig sicher zwischengespeichert werden kann.


Danke, hatte Angst davor. Es ist bereits eine dedizierte Installation mit separatem DB-Server. Hoffentlich optimieren sie die Kasse in Mage 2 :)
Sander Mangel

1
2.0 Beinhaltet eine Menge Überarbeitungen, so dass wir hoffen können. Ehrlich gesagt sind die Produktmodelle selbst ein wesentlicher Faktor, der die Kaufabwicklung verlangsamt - sie müssen die Typinstanzen für jedes Produkt durchlaufen, während das Angebot erstellt / auf Bestellung konvertiert wird. Dies kann ein teurer Prozess sein.
Andrew Quackenbos

1

Vielleicht sollten Sie die Lese- und Schreibvorgänge in Ihrer Datenbank aufteilen. Sie müssen jedoch eine nahezu sofortige Replikation einrichten, was mich immer beunruhigt hat, obwohl andere möglicherweise weitere Informationen darüber haben, wie sie am besten konfiguriert werden können.


Ich bin mir nicht sicher, ob das eine zuverlässige Lösung ist, um ehrlich zu sein. Klingt nach einer ziemlich großen Veränderung unvollständiger Daten. Die Idee ist wirklich schön, tho!
Sander Mangel

Ich stimme bis zu einem gewissen Grad zu und gebe zu, dass ich es selbst nie gemacht habe, obwohl ich verschiedene Leute sehe, die Blog-Posts schreiben usw., die andeuten, dass sie eine deutliche Leistungsverbesserung gesehen haben. Wenn ich Benchmarks etc. finde, werde ich sie veröffentlichen.
Richard Cleverley

Danke Richard, ich werde mich auch mit meiner Hosting-Firma darüber unterhalten. Sie haben viel mehr Erfahrung mit solchen Sachen, denke ich. Wenn ich noch eine Information habe, poste ich sie
Sander Mangel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.