Maîtriser la table ps_cart_rule_combination dans PrestaShop 1.7

Dans cet article, j'explore un problème récurrent sur PrestaShop 1.7 : l'augmentation massive de la table cart_rule_combinations, pouvant ralentir votre site. Je détaille les signes avant-coureurs, les causes, et propose des solutions pour gérer et prévenir cette expansion, assurant ainsi une performance optimale de votre e-commerce.

Illustration pour l'article Maitriser la table ps_cart_rule_combination de Prestashop

Maîtriser la table ps_cart_rule_combination dans PrestaShop 1.7

Dans cet article, j'explore un problème récurrent sur PrestaShop 1.7 : l'augmentation massive de la table cart_rule_combinations, pouvant ralentir votre site. Je détaille les signes avant-coureurs, les causes, et propose des solutions pour gérer et prévenir cette expansion, assurant ainsi une performance optimale de votre e-commerce.

Photo Maxime Benard
Le
Lecture de 9 minutes

Dans le monde du e-commerce, PrestaShop se distingue comme une plateforme de choix pour sa flexibilité et ses fonctionnalités étendues. En particulier, PrestaShop 1.7 est plébiscité pour sa facilité d'utilisation et ses nombreuses options de personnalisation. Cependant, même les meilleures technologies ne sont pas à l'abri de certains défis. Récemment, un de mes clients a fait face à une problématique assez connue sur PrestaShop, un problème persistant depuis de nombreuses années : l'explosion de la taille de la table cart_rule_combinations de la base de données. Après de multiples promotions mises en place, cette table a vu son volume de données augmenter de façon spectaculaire, atteignant le nombre stupéfiant de 1,6 milliard de lignes.

Cette situation, loin d'être anodine, peut entraîner un ralentissement significatif des performances du site et nuire à l'expérience utilisateur. Dans cet article, nous allons explorer les moyens d'identifier ce problème, comprendre à quel moment la taille de la table devient critique et discuter des solutions possibles. Nous nous pencherons également sur le rôle du module "Promotions & Discounts". Ce module, connu pour sa capacité à créer des règles de panier complexes, peut également contribuer à l'expansion excessive de la table cart_rule.

Découvrons ensemble comment naviguer à travers ce défi technique et assurer une gestion efficace et optimisée de votre site PrestaShop 1.7.

Comment identifier le problème

Lorsque vous gérez quotidiennement votre site PrestaShop, certains signes avant-coureurs peuvent vous alerter sur un problème avec la table cart_rule_combinations. Voici comment les reconnaître :

Ralentissements du Backoffice

Vous commencez votre journée, prêt à gérer les commandes et les produits, mais vous réalisez que le backoffice de PrestaShop ne répond plus aussi vite qu'avant. Ce n'est pas juste une page qui charge lentement, mais un ralentissement général qui affecte toutes vos actions. Il peut y avoir de multiples cause à cela (module problématique, serveur surchargé, serveur sous-dimensionné…) et l'une de celle-ci peut être la base de données. En effet si celle-ci est trop chargée vous pourriez subir certains ralentissement. Il est donc important de vérifier régulièrement le poids des tables de votre base de données pour s'assurer qu'il n'y a rien de problématique.

Voici une requête SQL pour récupérer les tables les plus lourdes. Pensez bien à remplacer le "YOUR_DATABASE_NAME".

SELECT 
  table_schema as `Database`,  
  table_name AS `Table`, round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` 
FROM information_schema.TABLES 
WHERE table_schema = `YOUR_DATABASE_NAME` 
ORDER BY (data_length + index_length) DESC;

Ralentissement lors de la Création de Promotions

Lorsque vous lancez de nouvelles promotions, ce processus, habituellement fluide, devient une course d'obstacles. Chaque étape prend plus de temps que prévu. Cette lenteur inhabituelle lors de la création ou la modification de promotions peut être un indicateur clé que votre table ps_cart_rule_combinations est peut-être trop sollicitée.

Monitoring

Utiliser des outils de monitoring peut transformer la façon dont vous gérez les performances de votre site. Ces outils, comme un tableau de bord, peuvent révéler des anomalies dans les performances, indiquant une possible surcharge d'une la table de votre base de données.

Taille des Backups

Enfin, gardez toujours un œil sur la taille de vos backups. Une augmentation inattendue de leur taille peut être le témoin silencieux d'une table cart_rule_combinations qui a débordé. C'est un signe concret que votre base de données a peut-être besoin d'une attention particulière.

D'où vient l'expansion de cette table ?

Pour comprendre pourquoi la table cart_rule_combinations peut connaître une expansion massive, il est essentiel de se pencher sur son utilité de base. Cette table joue un rôle crucial dans la gestion des règles de panier (cart rules) sur PrestaShop. Elle est conçue pour stocker les informations sur les combinaisons de règles de panier qui sont compatibles entre elles.

Prenons un exemple simple pour illustrer ce concept. Imaginez que votre boutique PrestaShop ait déjà 1000 règles de panier (cart rules) en place, toutes compatibles les unes avec les autres. Lorsque vous créez une nouvelle règle de panier, le système doit insérer des données dans la table cart_rule_combinations pour chaque combinaison possible avec les règles existantes. Dans ce cas, cela signifie ajouter 1000 nouvelles lignes pour cette seule règle. Si vous ajoutez encore une autre règle, le nombre de lignes nécessaires continue d'augmenter de manière exponentielle. C'est un exemple classique de croissance exponentielle : chaque nouvelle règle de panier ajoutée multiplie le nombre de combinaisons nécessaires.

De plus, l'intégration de modules externes peut compliquer davantage la situation. Certains modules, comme ceux offrant des fonctionnalités de cartes cadeaux ou de promotions spéciales, peuvent automatiquement créer de nouvelles règles de panier. Ces modules, bien qu'utiles pour améliorer l'expérience utilisateur et offrir plus de flexibilité dans les promotions, peuvent contribuer significativement à l'expansion rapide de la table cart_rule_combinations. Chaque règle ajoutée par ces modules peut se traduire par des milliers de nouvelles lignes, surtout si votre site a déjà un grand nombre de règles de panier actives.

C'est cette croissance exponentielle, souvent sous-estimée, qui peut mener à une surcharge considérable de la table cart_rule_combinations, affectant ainsi les performances globales du site. Comprendre cette dynamique est crucial pour gérer efficacement votre base de données et maintenir la réactivité de votre site e-commerce.

À quel moment la taille devient critique ?

Déterminer le moment précis où la taille de la table cart_rule_combinations devient un problème critique pour un site PrestaShop peut être complexe. Il n'existe pas de chiffre magique qui sonne l'alarme pour tous les sites, car plusieurs facteurs influencent la capacité d'un site à gérer de grandes tables.

Dépendance au Serveur et à la Technologie de la Base de Données

Tout d'abord, la performance de votre serveur joue un rôle clé. Des serveurs plus puissants avec de meilleures spécifications peuvent gérer des tables plus grandes sans montrer de signes de ralentissement. De même, la technologie de la base de données que vous utilisez peut avoir un impact significatif. Des systèmes comme MySQL, PostGreSQL ou d'autres variantes ont leurs propres seuils de performance et d'optimisation.

Impact des Modules et Développements Personnalisés

Ensuite, les modules installés et les développements personnalisés sur votre site PrestaShop peuvent également influencer la manière dont votre site gère les grandes tables. Certains modules peuvent être plus gourmands en ressources ou interagir avec la base de données d'une manière qui exacerbe les problèmes de performance. Les personnalisations spécifiques à votre site peuvent également jouer un rôle, en fonction de leur complexité et de leur interaction avec la base de données.

L'Importance d'une Évaluation Contextuelle

En raison de ces variables, il est essentiel d'adopter une approche contextuelle pour évaluer quand la taille de la table cart_rule_combinations devient critique. Cela implique de surveiller de près les performances de votre site, d'analyser l'utilisation des ressources par votre serveur et de comprendre comment les modules et les personnalisations interagissent avec votre base de données.

Bien qu'il soit difficile de donner un chiffre exact, les signes précurseurs que l'on a vu précédemment peuvent vous alerter. Une fois que ces symptômes apparaissent, il est possible que la taille de votre base de données commence à poser problème.

Les correctifs possibles & impacts

Requêtes SQL

L'un des correctifs envisageables implique l'utilisation d'une requête SQL pour éliminer les combinaisons de règles de panier obsolètes. Cette méthode cible spécifiquement les données qui ne sont plus valides, ce qui est avantageux pour ne pas perturber les promotions actives. Cependant, la principale contrainte de cette approche est le temps d'exécution, particulièrement long sur les tables volumineuses. Pendant cette période, le serveur peut subir un ralentissement notable, affectant les performances générales du site.

 DELETE FROM `ps_cart_rule_combination` 
 WHERE id_cart_rule_1 NOT IN ( SELECT id_cart_rule FROM `ps_cart_rule` ) 
 OR id_cart_rule_2 NOT IN ( SELECT id_cart_rule FROM `ps_cart_rule` )

Attention la requête peut prendre plusieurs heures vu l'étendu de la table et risque de rendre le serveur très lent durant cette opération.

Script de nettoyage

Une autre solution consiste à utiliser un script de nettoyage. Cette méthode est idéale lorsque la taille de la table est encore gérable. Le script permet un nettoyage précis et contrôlé des données, en se concentrant sur les informations obsolètes ou les promotions expirées. L'avantage de cette approche est qu'elle offre une flexibilité dans la gestion des données et peut être exécutée pendant les périodes de faible trafic pour minimiser l'impact sur les performances du site. Cependant, elle exige une surveillance et une mise en œuvre régulières et peut s'avérer moins efficace si la table a déjà atteint une taille extrêmement importante.

Truncate de la table

La solution la plus radicale est le 'TRUNCATE' de la table ps_cart_rule_combination. Cette commande efface toutes les données de la table, ce qui est une méthode rapide et efficace pour résoudre les problèmes de performance liés à la taille de la table. Cependant, cette approche a l'inconvénient majeur de supprimer toutes les combinaisons de règles de panier, y compris celles qui sont encore valides. Cela peut avoir des conséquences importantes sur les promotions en cours et sur la logique commerciale des règles de panier.

Chaque solution présente des avantages et des inconvénients qui doivent être soigneusement évalués en fonction de la situation spécifique de votre site PrestaShop. La décision doit tenir compte de plusieurs facteurs, tels que la taille de la table, la fréquence d'ajout de nouvelles règles de panier, et la capacité de votre serveur à gérer des opérations lourdes de base de données.

Comment éviter cela ?

Pour prévenir l'expansion incontrôlée de la table ps_cart_rule_combination dans PrestaShop, une gestion proactive est essentielle. Voici deux stratégies clés qui peuvent vous aider à maintenir votre base de données en bonne santé et à éviter les problèmes futurs.

Suppression des Promotions Inactives

La première étape consiste à garder un œil attentif sur vos promotions. Il est courant d'accumuler au fil du temps un grand nombre de promotions inactives ou expirées. Ces promotions, bien qu'inactives, continuent d'occuper de l'espace dans la table ps_cart_rule_combination et peuvent contribuer à son gonflement. En effectuant un nettoyage régulier et en supprimant ces promotions inactives, vous pouvez réduire considérablement le nombre d'entrées dans la table. Cette action simple mais efficace permet de garder la base de données plus légère et plus gérable.

Réflexion Stratégique sur les Modules Installés

La seconde approche concerne les modules que vous avez installés sur votre site PrestaShop. Certains modules, en particulier ceux liés aux règles de panier ou aux promotions, peuvent créer automatiquement de nombreuses entrées dans la table ps_cart_rule_combination. Il est donc crucial de réfléchir à l'impact de chaque module avant son installation. Posez-vous les questions suivantes : Ce module est-il indispensable ? Y a-t-il des alternatives moins gourmandes en ressources ? Pouvez-vous configurer le module pour minimiser son impact sur la base de données ? En étant sélectif et stratégique sur les modules que vous choisissez d'utiliser, vous pouvez éviter une surcharge inutile de votre base de données.

Sources

Github Prestashop Issue

Thread sur le forum Prestashop

Créer son premier module Prestashop 1.8
Vous souhaitez développer votre premier module PrestaShop 1.8 ? Ce guide complet vous accompagne pas à pas dans la création de votre module, des fichiers essentiels jusqu'à l'installation. Découvrez les bonnes pratiques et astuces pour bien démarrer, même sans expérience approfondie en développement. Un tutoriel accessible qui vous donnera toutes les bases nécessaires.
Le marketing d'affiliation & le e-commerce, un combo gagnant ?
L’affiliation est devenue un levier incontournable pour les sites e-commerce. En collaborant avec des influenceurs, vous boostez vos ventes et votre image de marque. Découvrez les avantages, les défis, et un exemple concret avec IPLN.fr, qui a doublé son chiffre d’affaires grâce à une stratégie d’affiliation innovante.