-
Notifications
You must be signed in to change notification settings - Fork 6
Page auteur, récupération des posts partagés, lenteur systématique #295
Comments
Merci pour le rapport, peut-être en lien avec #159 mais c'est un gros chantier. On pourrait déjà tester les modifications que tu proposes pour avancer par petites touches. |
Là, je fais du profiling à la sauvage, en étudiant ce que le slow log de mariadb sort. La façon dont les posts sont filtrés, à coup de sql_in, nécessite :
Le faire en une seule requête c'est mécaniquement mieux. Et comme déjà dit, ça donne l'opportunité à l'optimiseur d'intervenir quand on lui met une sous-requête dans le IN. Ce qui serait encore mieux, parfois, à mon avis, ce serait de faire des join, directement, plutôt que des IN, on pourrait bénéficier de meilleurs plans d'exécution. Pour mémoire, sur la page /all, on a une requête qui nécessite de traiter les bloqués et ce sql_in pourrait lui aussi être raccourci. Ça se passe là : |
Il y a certainement des choses à améliorer de ce côté, mais je ne pense pas être le plus à même d'avoir un avis sur la question (du moins rapidement). Mais, reste-t-il encore d'autres personnes pour avoir un avis, là je pense est la question ^^ PS : je pense qu'il faudrait avant tout analyser le comportement sur une version à jour en SPIP 4, effectuer la mise à jour sur une instance de dev, ça c'est dans mes cordes :) |
Je souris, ce jour, après ma tentative de généraliser de remplacer les sql_in. Je constate que là où je croyais que ça avait un intéret, en définitive, ça n'en a pas tant que ça. Le souci était ailleurs, dans l'emploi d'une fonction de conversion de date mal placée. Bref, je vais maintenant travailler sur la lenteur d'enregistrement des nouveaux posts en espérant y trouver qq chose... |
Hello,
Je fais un petit peu d'étude des lenteurs que je trouve en augmentation sur SeenThis, sur le serveur de remplacement, en cours de préparation.
J'ai un point qui m'interroge. En regardant les slow queries, la boucle BOUCLE_messages génère des lignes avec des clauses IN à répétition, contenant parfois plusieurs milliers d'ID.
J'ai remplacé dans
seenthissq_fonctions.php
, pour tester :return '(id_auteur='.$me.' OR '.sql_in('id_me', array_map('array_pop', sql_allfetsel('id_me', 'spip_me_share', 'id_auteur='.$me))).')';
Par :
return '(id_auteur='.$me.' OR id_me IN (select id_me from spip_me_share where id_auteur='.$me.'))';
Et c'est plus rapide.
Mais est-ce que c'est souhaitable ?
Je constate que des appels à sql_in, il y en a d'autres.
N'est-il pas souhaitable de tous les remplacer de cette façon ? Cela laisse à priori l'opportunité à l'optimiseur de travailler à ce qu'il sait faire.
J'ai le même genre d'interrogation sur les auteurs bloqués, qui génèrent là aussi parfois des requêtes lentes, exemple ci-dessous. OK, c'est une seule seconde, mais s'il y a plus performant, autant l'utiliser.
The text was updated successfully, but these errors were encountered: