Depuis quelques jours on me rapporte des comportements étranges sur les forums de fedora-fr. Les messages récents ne seraient plus triés dans le bon ordre (ni dans aucun autre d’ailleurs)… Étonnant, car je n’ai rien touché au code de notre PunBB depuis un bon petit moment…
Bref un petit vim include/common.php
pour passer le PUN_SHOW_QUERIES à 1 et ainsi tracer les requêtes MySQL et m’apercevoir que la requête fait bien un ORDER BY t.last_post DESC
:
SELECT t.id AS tid, t.poster, t.subject, t.last_post, t.last_post_id, t.last_poster, t.num_replies, t.closed, t.forum_id
FROM punbb_topics AS t
WHERE t.id
IN ( 14524, 29504, 29192, 29526, 29426, 29358, 29381, 29507, 29512, 29534, 29523, 29531, 29532, 29514, 29469, 28791, 29308, 29141, 20353, 29449, 29505, 28867, 29500, 29495, 29535, 29321, 29478, 29480, 29486, 29499, 29506, 29528, 29529, 29457, 29496, 29533, 28380, 29510, 28969, 29142, 29416, 29454, 29511, 29513, 26116, 29333, 29267, 29455, 29493, 29524, 28420, 29258, 29410, 29418, 29452, 29509, 29491, 29477, 29487, 29492, 29501, 29508, 29515, 29517, 29519, 29520, 29525, 29530, 29527, 27926, 28938, 29231, 29265, 29371, 29440, 29485, 29497, 29502, 29518, 29522, 29521 )
GROUP BY t.id, t.poster, t.subject, t.last_post, t.last_post_id, t.last_poster, t.num_replies, t.closed, t.forum_id
ORDER BY t.last_post DESC
LIMIT 0 , 30
Un café plus tard, je lance directement la requête dans l’interface de phpMyAdmin et je m’aperçois que les résultats ne sont effectivement pas triés dans l’ordre… Mais qu’ai je fais ?! Je trace le log de yum et je constate que je suis récemment passé de mysql-server 5.0.45 à la version 5.0.51a…
root@borsalino ~> cat /var/log/yum.log | grep mysql
Oct 15 20:05:57 Installed: mysql.i386 5.0.27-1.fc6
Oct 15 20:08:09 Installed: mysql-server.i386 5.0.27-1.fc6
Oct 15 20:08:10 Installed: php-mysql.i386 5.1.6-3.7.fc6
Jan 20 18:56:44 Installed: mysql-libs.i386 5.0.45-1.fc6.remi
Jan 20 18:56:47 Updated: mysql.i386 5.0.45-1.fc6.remi
Jan 20 18:56:54 Updated: mysql-server.i386 5.0.45-1.fc6.remi
Jan 20 18:56:54 Updated: php-mysql.i386 5.2.5-1.fc6.remi
Feb 17 13:06:18 Updated: mysql-libs.i386 5.0.51a-1.fc6.remi
Feb 17 13:06:22 Updated: mysql.i386 5.0.51a-1.fc6.remi
Feb 17 13:06:29 Updated: mysql-server.i386 5.0.51a-1.fc6.remi
Dans le doute je contact l’ami Remi qui m’aide et me trouve ce bug : #30596 : GROUP BY optimization gives wrong result order.
Effectivement en virant les GROUP BY la requête se retrouve ordonnée comme il faut…
5 minutes plus tard Remi lance un build de MySQL comportant le correctif que j’installe dans la foulée et tout ce remet à marcher dans l’ordre ;-).
root@borsalino ~> yum --enable remi-test update mysql\*
De LLaumgui le 19 février 2008
C'est fou quand même, on part sur un PEBKAC et en fait c'est un problème du moteur...