Accélérer le panier pour passer à la caisse et enregistrer les actions de sauvegarde

18

J'exécute plusieurs boutiques Magento CE et les accélère avec la mise en cache, mais le panier et la commande restent toujours lents. Quelqu'un a-t-il de l'expérience ou des conseils pour accélérer ces pages?

Peut-être en optimisant la base de données?

Certaines requêtes ont été effectuées lorsque l'enregistrement d'une commande à partir de la caisse apparaît dans le journal des requêtes lentes sur le serveur et la base de données semble être le goulot d'étranglement.

Sander Mangel
la source
qu'est-ce que lent signifie? 1s? 5s? ... donne également quelques détails sur la taille des boutiques (nombre de produits simples, nombre de configurables, taille des tables sales_flat_quote * et ainsi de suite).
FlorinelChis
Le temps lent est compris entre 5 et 10 secondes en fonction de l’occupation du magasin. Il y a 50 000 produits simples, pas d'autres types. L'identifiant sales_flat_quote doit chercher demain (aucun accès pour le moment)
Sander Mangel
1
combien de règles de prix de panier avez-vous? ils ralentissent le chariot. Nous espérons également résoudre ce problème dans la version du Service Pack, prévue pour le T1 / T2 '13
Piotr Kaminski
@macki aucune règle de prix pour le moment, merci pour la mention tho. c'est bon à savoir
Sander Mangel

Réponses:

27
  1. Par expérience personnelle, désactivez le module Mage_Rss qui force un `` nettoyage du cache '' 4 fois dans le processus de paiement - très cher si vous utilisez le cache du système de fichiers, probablement encore cher si vous utilisez une base de données ou memcached.

  2. CE uniquement Désactiver Mage_Downloadable pour des raisons similaires tant que vous n'utilisez pas de produit téléchargeable, cela accélérera les opérations de paiement et de panier lorsque vous avez plusieurs articles dans le panier car il y a des observateurs sur des choses comme celles checkout_type_onepage_save_order_afterqui multiplient le temps de réponse par le nombre d'articles dans un chariot.

  3. Câblez xhprof / xhgui et faites du profilage.

Ralph Tice
la source
Merci XHProf et XHGui ressemble à un joli projet de week-end pour plonger
Sander Mangel
1
Vous devriez vraiment essayer de désactiver mage_rss ou de commenter ses observateurs. accélère la sauvegarde des commandes immédiatement
STANISLAS PIERRE-ALEXANDRE
1
J'aimerais entendre des commentaires de première main si l'astuce de désactivation Mage_Rss fonctionne pour l'OP
philwinkle
2
Je voudrais souligner que EE nécessite Mage_Downloadable comme dépendance:Module "Enterprise_PricePermissions" requires module "Mage_Downloadable
philwinkle
1
Je n'ai jamais fait de rapport et pour cela je suis désolé. La désactivation de Mage_Rss l'a accélérée considérablement, la désactivation de Mage_Downloadable n'a pas entraîné d'améliorations notables des performances, mais je dois dire que je n'ai pas fait de test de référence `` approprié '', juste plusieurs exécutions dans mon navigateur.
Sander Mangel
4
  • Définissez vos index sur manuel.
  • Désactiver le stockage des balises de cache

Ces deux changements auront un impact MASSIVE sur les performances car ils ont empêché Magento de vider les caches et de réindexer chaque fois qu'une commande est passée.

Cependant, cela a un coût, ce contenu peut être périmé - niveaux de stock, etc.

choco-loo
la source
merci, les niveaux de stock défectueux sont un problème sur la plupart des magasins. Mais gardez cela à l'esprit pour les magasins sans gestion de stock!
Sander Mangel
2

Si vous voulez le résoudre de manière expérimentale, il y a une extension du premier hackathon magento à Munich, en allemand:

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

Ils mettent les commandes en file d'attente dans une base de données mongo, l'idée était, si le serveur mysql est libre de les réécrire. Mais je ne sais pas jusqu'où ce projet est prêt. Afaik travaille toute l'écriture, mais pas l'écriture arrière.

Fabian Blechschmidt
la source
Merci, je cherchais des solutions noSQL et cela pourrait être un bon point de départ!
Sander Mangel
2

Je ne connais pas la version de Magento CE avec laquelle vous avez du mal. Mais j'ai eu de sérieux problèmes de performances avec mon CE 1.6.
Motif: index erronés et manquants. Ils ont été corrigés dans CE 1.6.2
Vous pouvez vérifier si cela vous aide.
J'ai réduit le temps de paiement pour 38 lignes avec un total de 73 articles de 123 à 4 secondes !!!!

Ça vient:

/*!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 */;
limex
la source
1

La meilleure façon d'accélérer les opérations de grande base de données est d'avoir votre base de données sur son propre serveur optimisé pour l'utilisation de la base de données. Il n'y a pas grand-chose à améliorer dans la zone de paiement au niveau du code (bien que certains types de produits, comme Configurable, puissent vraiment ralentir le processus de cotation) car très peu peuvent être mis en cache en toute sécurité.

Andrew Quackenbos
la source
Merci, j'avais peur pour ça. C'est déjà une installation dédiée avec un serveur DB séparé. J'espère qu'ils optimiseront le paiement dans Mage 2 :)
Sander Mangel
1
2.0 Inclut beaucoup de réécritures jusqu'à présent, donc nous pouvons l'espérer. Honnêtement, les modèles de produits eux-mêmes sont en grande partie ce qui ralentit le paiement - il doit itérer sur les instances de type pour chaque produit lors de la création du devis / conversion en commande, et cela peut être un processus coûteux.
Andrew Quackenbos
1

Peut-être cherchez à diviser les lectures et les écritures dans votre base de données. Vous aurez besoin d'une configuration de réplication presque immédiate, ce qui m'inquiète toujours de le faire, bien que d'autres puissent avoir plus d'informations sur la meilleure façon de le configurer.

Richard Cleverley
la source
Hm je ne sais pas si c'est une solution fiable pour être honnête, cela ressemble à un assez gros changement de données incomplètes. L'idée est vraiment chouette!
Sander Mangel
Je suis d'accord dans une certaine mesure et j'avoue que je ne l'ai jamais fait moi-même, bien que je vois diverses personnes écrire des articles de blog, etc., suggérant qu'elles ont vu une nette amélioration de leurs performances. Si je peux trouver des repères, etc., je les publierai.
Richard Cleverley
Merci Richard, je vais aussi avoir un entretien avec ma société d'hébergement à ce sujet. Ils ont beaucoup plus d'expérience avec ce genre de choses, je pense. Si j'ai une autre information, je la posterai
Sander Mangel