[spip-dev] un probleme avec les referers

Salut,

si on a trop de referers dans spip_referers_temp, la fonction
calculer_referers() explose la barre des 8 Mb de mémoire vive allouée à un
seul process apache/php ; les referers ne sont donc pas calculés, la table
continue à se remplir, d'où explosion le jour suivant, etc. ad libitum.

Sur le Diplo c'est bloqué depuis 15 jours, avec quelques centaines de
milliers de lignes dans la table. Je pourrais vider la table pour récupérer
un fonctionnement normal, mais il me paraît plus logique de trouver un code
moins gourmand en mémoire ou un calcul qui se fasse plus souvent qu'une fois
par jour, ou qui fonctionne par tranches, etc.

Si vous avez une idée...

-- Fil

si on a trop de referers dans spip_referers_temp, la fonction
calculer_referers() explose la barre des 8 Mb de mémoire vive allouée à un
seul process apache/php ; les referers ne sont donc pas calculés, la table
continue à se remplir, d'où explosion le jour suivant, etc. ad libitum.

Sur le Diplo c'est bloqué depuis 15 jours, avec quelques centaines de
milliers de lignes dans la table. Je pourrais vider la table pour récupérer
un fonctionnement normal, mais il me paraît plus logique de trouver un code
moins gourmand en mémoire ou un calcul qui se fasse plus souvent qu'une fois
par jour, ou qui fonctionne par tranches, etc.

Si vous avez une idée...

J'ai juste ajouté un LIMIT 0,4000 dans la première requête, qui aboutit à
ignorer les referers au-delà de cette limite.

    $query = "SELECT COUNT(DISTINCT ip) AS visites, referer, HEX(referer_md5) AS md5 ".
        "FROM spip_referers_temp GROUP BY referer_md5 LIMIT 0,4000";

Or, c'ezst encore trop, puisque le gros INSERT DELAYED... explose aussi. Je
ne sais pas où on peut mettre la limite.

Par ailleurs, faut-il, si on met cette limite, faire un ORDER BY visites
DESC histoire d'avoir les référers les plus significatifs ?

Enfin, je ne vois pas ce qui, dans ce code, interdit de l'utiliser plus
souvent (toutes les vingt minutes ou heures) : le seulm truc gênant c'est
qu'un même visiteur passant régulièrement dans la journée comptera plusieurs
visites au lieu d'une seule. Moi ça ne me dérange pas, l'essentiel c'est de
ne pas comptabiliser pour 100 visites quelqu'un qui fait plein de reload et
de forums...

Commentaires bienvenus.

-- Fil

Fil wrote:

si on a trop de referers dans spip_referers_temp, la fonction
calculer_referers() explose la barre des 8 Mb de mémoire vive allouée à un
seul process apache/php ; les referers ne sont donc pas calculés, la table
continue à se remplir, d'où explosion le jour suivant, etc. ad libitum.

Pourquoi tu ne modifies pas php.ini pour désactiver la limite de mémoire ?

>si on a trop de referers dans spip_referers_temp, la fonction
>calculer_referers() explose la barre des 8 Mb de mémoire vive allouée à un
>seul process apache/php ; les referers ne sont donc pas calculés, la table
>continue à se remplir, d'où explosion le jour suivant, etc. ad libitum.

Pourquoi tu ne modifies pas php.ini pour désactiver la limite de mémoire ?

Le problème que je signale concerne la stabilité de tous les spip : si ton
site a un trafic important durant une journée (signalé sur slashdot, sur CNN
scoop monstrueux, avion dans le pentagone... etc.) il ne s'en remettra
jamais. Mais je ne suis pas sûr de ce qu'il faut faire...

-- Fil