Récemment
-
Des modules et des hacks - liste non exhaustive des modules présentant un risque
Discussion générale12 -
Patch de sécurité thèmes warehouse / iqit
Discussion générale1 -
Copieurs-Colleurs
Discussion générale2 -
Créer un contrôleur front (indépendant)
Tutoriels1 -
Fourre-tout de trucs et astuces
Tutoriels4 -
[1.3] Implanter des classes overrides
Tutoriels1 -
[1.6.0.5 - 1.6.1.18] Fatal error lors de la suppression d'image du themeconfigurator
BUG connus1 -
Comment offrir frais de port à partir d'un certain montant MAIS avec transport facturé au poids ?
Discussion générale4 -
[1.7.x] Impossible de gérer le menu du BO, même en SuperAdmin
BUG connus1 -
[1.5.x],[1.6.x],[1.7.x] Pas de redirection canonical pour page manufacturer & supplier
BUG connus4 -
[1.6.0.5]+ Reference error: $ is undefined dans le BackOffice
BUG connus2 -
[1.5.5.0]+ Ajax error lors de ma mise à jour des ranges transporteur (AdminCarrierWizard)
BUG connus2 -
[ganalytics-2.0.0] Le module peut provoquer une erreur ajax lors de l'ajout au panier
BUG connus1 -
[1.6.x.x]+ BO - Sélection de langue pour contrôle orthographique impossible dans tinyMCE
BUG connus1 -
[1.7.x] Erreur 500 lors de la collecte des statistiques - pas de statistiques de visites
BUG connus1 -
Supprimer le ID de l'url, et afficher la catégorie dans l'url, est-ce réellement utile ?
Tutoriels2 -
[1.6.1.0]+ Duplicate entry XXXXXX for key id_product_2 - INSERT INTO ps_specific_price - BackOffice, créer/éditer un produit (SpecificPriceRule.php)
BUG connus1 -
[1.6.1.0]+ Too many tables, MySQL can only use 61 tables in a join - Backoffice, créer/éditer un produit (SpecificPriceRule.php)
BUG connus1 -
[1.5.0.17]+ Redirection vers http forcée suite à redirection shop domain (en https)
BUG connus2 -
[1.5.0.17+] Erreur de protocole lors de la génération de pdf
BUG connus1
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 .