Piwik, le remplacent du logiciel libre de mesure de statistiques web PHPMyVisites, est une alternative intéressante au service comme GoogleAnalytics, pour peu que l'on dispose d'un serveur où héberger le logiciel. Piwik enregistre toutes les infos disponibles sur les visites dans une base MySQL, qui grossit donc fortement au fil du temps...

piwik-logo.png

NB : Depuis la version 1.5.1, Piwik propose de faire le ménage directement dans l'interface web, sous "Paramètres/Privacy". Il est possible de paramétrer le nombre de jours à conserver et la fréquence des suppressions. Un vrai bonheur !

piwik-autodelete.png

Je n'avais pas encore trouver de commande pour faire simplement et finement le ménage dans la base de données sans avoir à trop galérer. Voici un petite commande SQL pour effacer les enregistrements qui ont plus de x jours de la base de données de Piwik.

C'est fort pratique si la taille de la base de données est un souci, sachant que la base de Piwik devient rapidement conséquente même en analysant un site ayant un trafic modéré. Avoir une base de données légère est également très perceptible au niveau du chargement des pages de statistiques.


La requête SQL

Là voilà :

DELETE piwik_log_visit, piwik_log_link_visit_action FROM piwik_log_visit INNER JOIN piwik_log_link_visit_action WHERE piwik_log_visit.idvisit = piwik_log_link_visit_action.idvisit AND visit_server_date <= CURRENT_DATE() - 30

Il est bien sur possible de l'exécuter dans PHPMyAdmin.

requete-phpmyadmin.png

Le paramètre 30 en fin de requête permet de définir le nombre de jours à conserver. Ici donc les 30 derniers jours d'enregistrements ne seront pas supprimés.


Pour les gros bœufs

Avant de connaitre cette requête SQL, j'utilisais le méthode d'écrite dans la FAQ de Piwik, à savoir supprimer les tables dont le noms commence par piwik_archive_*, ou exécuter la requête suivante (remplacer X par l'id du site à vider) :

DELETE FROM piwik_log_visit WHERE idsite = X

Ça marche bien aussi, mais c'est moins subtil... :-)

Commentaires

1. Le 5 octobre 2012, 09:02 par AlainR

Merci pour cette aide. La structure des tables étant un peu différente actuellement, quelle est la requête SQL actuelle?
Cette question parce que j'obtiens l'erreur suivante :
"Unknown column 'visit_server_date' in 'where clause'"
et je ne sais pas par quel champ remplacer quoi...
Merci encore!