MyBB.support, le portail francophone de MyBB

Version complète : Problème de performances sur réponse à un post
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.

Bonsoir,

j'ai un soucis de perf sur mon forum depuis que je suis passé en prod en fin de semaine dernière.
il arrive que les réponses aux posts soient TRES longues.

J'ai un serveur dédié avec 6 coeurs, assez de RAM...

quand un user répond à un post, il arrive que le site mette 15s pour valider la réponse

le problème semble venir de la commande :

Citation :mysql> SELECT pid FROM mybb_posts WHERE tid='143583' ORDER BY dateline ASC LIMIT 0, 1;
+---------+
| pid |
+---------+
| 3856104 |
+---------+
1 row in set (16.36 sec)

cette commande peut mettre 0.1s ou 15s de manière aléatoire.
lorsqu'elle est longue, j'ai un core qui passe à 100%
la machine fonctionne alors parfaitement en lecture, rien ne rame, mais il faut 15s pour que l'utilisateur puisse voir son post mis à jour

un show processlist ne montre rien de spécial.

j'ai beau chercher dans tous les sens, je ne comprends pas pourquoi il y a soucis Sad






je vois que ma question ne déchaîne pas les foules Big Grin

bon bah pas grave, je vais me débrouiller Wink
(11-12-2013, 10:28)whinpo a écrit : [ -> ]je vois que ma question ne déchaîne pas les foules Big Grin

Je ne vois pas pourquoi ta demande déchaînerait les foules ! Tongue

Je ne pense pas que ce soit lié à proprement parler à MyBB, ça se saurait et tu ne serais pas le seul.
Tout ça semble être un problème technique inhérent au serveur lui-même, puisque non reproductible.
Ou alors c'est la base de données qui répond de manière aléatoire peut-être ?
Dans tes statistiques, je vois :
Code :
Nos membres ont créé un total de 3 347 525 messages dans 119 990 discussions.
Nous avons actuellement 17 051 membres enregistrés.
C'est énorme !!! La base a peut-être le droit de ramer un peu avec un tel nombre de posts !
Tu es sûr d'avoir presque 3 millions et demi de posts "utiles et vrais" ? N'y a-t-il pas une invasion de spammeurs, ce qui pourrait expliquer des ralentissements fort compréhensibles du moteur MySQL ?

PS : En me connectant avec les identifiants donnés, l'ai eu la surprise d'avoir des MPs non lus!? Et parmi ces MPs, 8 fois le même ??? Dont 7 fois le 06-12-2013 entre 17:49 et 18:28 intitulés : "Votre demande d'avatar a été validée". Je n'ai jamais demandé d'avatar.
N'y aurait-il pas un plugin défectueux qui envoie des réponses automatiques dupliquées ?
N'y aurait-il pas un fatras de duplications (posts, MPs, membres).
Tous les nombres affichés dans tes stats me paraissent plus qu'invraisemblables, exorbitantes !

Par comparaison, voici les stats actuelles de mybb.com qui existe depuis des lustres et qui a des membres du monde entier :
Code :
Our members have made a total of 970,530 posts in 125,578 threads.
We currently have 68,329 members registered.
merci de ta réponse Wink

le profil que tu as es un profil de test, c'est avec lui que je joue mes progs spécifiques (validation des cotisations, avatars etc...) d'où les MP bizarres que tu peux voir Wink

non il est bel et bien de plus de 3.000.000 de posts Smile
pas de spammeurs à l'horizon pour le moment

c'est un forum qui existe depuis 2001, mais les posts ne démarrent qu'en 2004 (une migration à la hussarde de mon prédécesseur)

on vient de migrer depuis XMB sur la même machine et on n'avait jamais ce genre de résultats

tu peux voir aussi quelques modifs spécifiques dans le panneau de contrôle perso avec un peu de jeditable pour modif en ligne des coordonnées du membre

j'ai ajouté près de 4000 lignes de code spécifique...

environ 15 nouveaux membres par jour
un peu plus de 600 messages par jour
on est le plus gros forum francophone de la spécialité... plus gros que le club français officiel

bref c'est pas un ptit forum Wink

en fait ce qui m'interpelle c'est que sur mon forum de test qui contient les mêmes données, un explain sur la requete ne donne pas la même chose
il n'utilise pas le même index et la requête répond de manière instantanée

si je fais un use index(tid) sur la requête sur le forum de prod=> je passe à 0 sec...
et si je relance immédiatement en le laissant utiliser l'index dateline : 15 secondes

la requête en question est dans le datahandler/post.php

je me demande carrément si je ne vais pas virer l'index dateline...

et puis je me dis que c'est pas parce que sur mybb.com ils ne connaissent pas le pb qu'il n'existe pas Wink
Pour accélérer cette requête il est nécessaire d'avoir " index on (tid, dateline)".
(11-12-2013, 17:40)exdiogene a écrit : [ -> ]Pour accélérer cette requête il est nécessaire d'avoir " index on (tid, dateline)".

du genre :
create index tid_dateline on mybb_posts(tid, dateline);

?

Citation :et puis je me dis que c'est pas parce que sur mybb.com ils ne connaissent pas le pb qu'il n'existe pas
Alors là, entièrement d'accord. Mais je n'ai jamais dit qu'ils ne le connaissaient pas, je n'en sais fichtre riien.
J'ai simplement dit que si ce problème était général, d'autres membres en auraient fait mention.

Peut-être est-il important de noter qu'il s'agit d'une migration depuis XMB? Tout s'est-il bien passé au cours de cette migration ?
Si en plus tu as rajouté 4000 lignes de code, ça peut influer sur certains comportements peut-être.

Quant à ta question sur la durée de réponse, j'avoue humblement que je ne vois pas pourquoi le process serait plus lent ou plus rapide selon le critère ORDERBY.
Par contre, sans sans aucun critère de tri, il me semble tout à fait logique que ça réponde plus vite, surtout avec un tel volume de posts !
Mais je suis loin d'être un spécialiste MySQL. Exdiogene est bien plus armé que moi pour tenter de répondre à cette question précise.

Si tu vires le ORDERBY dateline, tes posts ne seront plus triés non plus.

Juste une question. Tu dis que sur ton forum de test, la réponse est instantanée? Mais quelle est donc la différence (structure et contenus) entre ce forum de test et celui de prod ?...

Edit : Pendant que je rédigeais je vois qu'exdiogene a répondu... Tant pis je poste...
en fait c'est strictement le même...
si ce n'est que mon forum de test est moins puissant (ce sont 2 VM sur le même host)
même version d'OS (ubuntu 13.10) et même paquets installés

c'est pourquoi je ne saisis pas pourquoi la même requête ne donne pas la même chose

concernant la requête je ne peux pas trop la toucher : le but de cette requête est, lors d'un post, de savoir si c'est le 1er post ou pas.

quant à mes lignes de code, il est certain qu'elles ajoutent des requêtes de BDD mais le debug ne montre rien de ce côté
c'est vraiment cette requête indiquée plus haut qui pose soucis, ainsi qu'une autre du même style qui, elle aussi, bute sur le fait d'utiliser l'index dateline



Bonjour,

problème corrigé juste en rajoutant des champs dans l'order by

j'ai patché :
* inc/datahandlers/post.php
Code :
"order_by" => "dateline",
devient
"order_by" => "pid,dateline",
* inc/functions.php
Code :
ORDER BY p.dateline ASC
devient
ORDER BY p.dateline,p.pid ASC
* editpost.php
Code :
$query = $db->simple_select("posts", "pid", "tid='{$tid}'", array("limit" => 1,
"order_by" => "dateline", "order_dir" => "asc"));
devient
$query = $db->simple_select("posts", "pid", "tid='{$tid}'", array("limit" => 1, "order_by" => "pid,dateline", "order_dir" => "asc"));

 Utilitaire de traduction fourni par Regentronique