Récemment
-
Des modules et des hacks - liste non exhaustive des modules présentant un risque
Discussion générale17 -
Thème enfant
PhenixSuite16 -
SumUp Payments Constant Update Request
Modules2 -
PaypalAPI erreur
PhenixSuite53 -
Problèmes de prix avec plusieurs devises et PayPal
PhenixSuite6 -
Solutions de paiement...
Discussion générale5 -
Petit code pour les descriptions de produits
Discussion générale3 -
Feuilles de styles non chargées si smart cache activé [RÉSOLU]
PhenixSuite5 -
PayPal Module Error
Bugs & Améliorations2 -
Transient Bug after 1.6.2.31 Upgrade
Bugs & Améliorations2 -
blockcategory et left_column
BUG connus1 -
[REGLÉ] override - je n'y arrive pas.
Modules10 -
les routes sur mesures
Discussion générale6 -
Nouvelle attaque ?
Discussion générale11 -
Problème calcul HT
Bugs & Améliorations42 -
Erreur sur facture générée depuis le FO
PhenixSuite3 -
Factures ne se génèrent plus depuis 06/12 [RÉSOLU]
Bugs & Améliorations20 -
Edition en masse des déclinaisons
Nouvelles fonctionnalités4 -
Mise à niveau de Prestashop 1.6.24 vers PhenixSuite 1.6.30
Discussion générale2 -
Thème possible
Questions relatives à l'installation/upgrade2
Comment vider les grosses tables gourmandes comme connections/guest/cart
-
J'ai de très grosses tables dans mon shop et on me conseille de les vider. Comment faire?
-
La réponse courte est "ne pas le faire"
-
La réponse longue "oui mais", mais justement les explication sont longue. J'y reviens tout bientôt
-
Pour ma part j'utilise un script fait maison :
<?php require(dirname(__FILE__).'/config/config.inc.php'); /******************************************************************************* ********** Supression des Stats appelé par Cron ******************************* *******************************************************************************/ // nbr de jours à conserver $days=180; //connections etc ... $day_page=180; //page viewed // nbr de guest à conserver $nbGuest=5000; $interval=$days.' DAY'; //1- ps_connections_pages delete $res=Db::getInstance()->Execute(' DELETE FROM `'._DB_PREFIX_.'connections_page` WHERE time_start < DATE_SUB(NOW(), INTERVAL '.$interval.')'); if(!$res) die('error delete ps_connections_pages for '.$days.' day(s)'); //2- ps_connections delete $res=Db::getInstance()->Execute(' DELETE FROM `'._DB_PREFIX_.'connections` WHERE date_add < DATE_SUB(NOW(), INTERVAL '.$interval.')'); if(!$res) die('error delete ps_connections for '.$days.' day(s)'); //3- ps_connections_source delete $res=Db::getInstance()->Execute(' DELETE FROM `'._DB_PREFIX_.'connections_source` WHERE date_add < DATE_SUB(NOW(), INTERVAL '.$interval.')'); if(!$res) die('error delete ps_connections_source for '.$days.' day(s)'); //4- ps_page_viewed delete $currentRange=DateRange::getCurrentRange(); $endRange = $currentRange-$day_page; $res=Db::getInstance()->Execute(' DELETE FROM `'._DB_PREFIX_.'page_viewed` WHERE id_date_range < '.$endRange); if(!$res) die('error delete ps_page_viewed for '.$endRange.' date_range'); //5- ps_guest delete $sql="SELECT `id_guest` FROM `ps_guest` ORDER BY `id_guest` DESC LIMIT 0, 1"; $res = Db::getInstance()->ExecuteS($sql); if(!$res) die('error select highest ps_guest'); $currentGuest=$res[0]['id_guest']; $endGuest = $currentGuest-$nbGuest; $res=Db::getInstance()->Execute(' DELETE FROM `'._DB_PREFIX_.'guest` WHERE id_guest < '.$endGuest); if(!$res) die('error delete ps_guest for '.$endGuest.' endGuest');
-
Ne m'en veux pas je vais regarder ça point par point.
Bon les bons points:
- tu n'a pas fait de truncate que l'on voit dans plein de soluce à 2 reals et qui foutent un bordel pas croyable.
- tu n'a pas touché à des tables plus dangereuses
Les moins bons:
- la directive NOW() n'a pas la même valeur tout au long du script et ça va poser des problèmes.
- connections_page et connections sont liées, si la connections_page pointe vers une connections inexistante ça fait du pas glop avec un id_connections égale à 0 dans les jointures. Pourquoi? à cause de 1. Impact mineur mais des "sessions" de page vont rester en mode camping. A noter de nombreuses connections sont recrées si elles n'existent plus.
- connections là attention lien de guest, un guest ne trouve plus sa connections. Impact mineur
- page_viewed, rien a dire
- guest là par contre id_guest est sur customer, si il ne le trouve pas il le recrée - c'était bien la peine de supprimer.
-
Je veux bien la version longue :)
-
Bonjour Doekia, même question pour un prestashop 1.7.3, peut on vider ces tables très imposantes, pour ma part ma BDD fait 250 Mo et seulement les tables Connection et Gest font 195 mo !!! si je peux totalement les vider ma BDD ne s'en portera pas plus mal ;)
merci
-
Si tu es prêt à perdre tout ton historique de visite, truncate les tables
Sinon il faut faire des requête en suppression un peu compliquées et compte tenu de ton volume nous parlons de plusieurs jours de maintenance pour faire cela - lock des tables connexion == aucune visite web possible.J'ai fais un module de nettoyage - par cron qui résoud ce problème
https://store.enter-solutions.com/fr/75-housekeeper.html
Compte tenu de ton volume à nettoyer il faudra plusieurs semaine avant que les tables retrouvent une taille normale.ATTENTION: Lorsque le cron s'exécute (ou que tu le lance manuellement) ton shop est quasi inaccessible en raison des locks en suppressions sur des tables essentielles.
Il (le module) limite les suppressions à 10'000 paniers et 25'000 connexions/guest par exécution afin de ne pas mettre le bazar dans trafic .