[spip-dev] optimisation des requetes. ??

Salut,

bon je peux pas imaginer laisser ca en lieu et place à chaque click dans
le Backend:

mued@bugale:~/htdocs/spip/ecrire/data$ cat mysql.log | grep spip_rubriques|wc -l
=>>>> 8565 <<<<=

<troll type="justifié">
j'comprends que la loi de moore soit de vendre toujours plus de machines
mais la ...
</troll>

Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=244 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=69 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=245 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=308 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=309 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=248 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=14 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=15 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=16 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=17 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=18 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=19 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=333 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=20 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=23 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=21 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=22 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=335 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=24 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=327 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=25 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=8557 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=26 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=27 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=28 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=29 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=30 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=31 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=32 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=33 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=34 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=330 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=332 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=70 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=71 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=72 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=73 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=77 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=78 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=74 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=75 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=76 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=79 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=324 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=325 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=80 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=81 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=88 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=89 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=90 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=91 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=92 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=93 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=82 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=83 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=84 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=85 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=86 ORDER BY titre
Oct 26 15:19:30 127.0.0.1 (pid 8224) - SELECT * FROM `spip25`.spip_rubriques WHERE id_parent=87 ORDER BY titre

etc

la requete incriminée est :

  $result_rub = spip_query("SELECT * FROM spip_rubriques WHERE id_parent=$id_rubrique ORDER BY titre");

dans js_menu_rubriques.php

je m'occupe actuellement de produire quelque chose de moins lourd pour le
connecteur MySQL.

/Lex

Salut

comme je me parle tout seul à moi même personnaly alone myself et devant
l'étendue de ce problème - 16.483s de génération en entete de chaque
page - je commence à utiliser le cache afin de :

vider le cache lors d'un insert ou d'un delete.
generer le cache 1 fois quand il n'est pas présent et le reutiliser lors
de chaque page ensuite.

++a.lex

Alexandre Hélias [LNG] wrote:

Salut

comme je me parle tout seul à moi même personnaly alone myself et devant
l'étendue de ce problème - 16.483s de génération en entete de chaque
page - je commence à utiliser le cache afin de :

vider le cache lors d'un insert ou d'un delete.
generer le cache 1 fois quand il n'est pas présent et le reutiliser lors
de chaque page ensuite.

Pour essayer de traduire, c'est une utilisation de cache de donnée plutot que de résultat, plus morcelé et pas spécifique à une URL ou un utilisateur.

M.

Pour essayer de traduire, c'est une utilisation de cache de donnée
plutot que de résultat, plus morcelé et pas spécifique à une URL ou un
utilisateur.

Normalement, le js_rubriques utilise le cache HTTP. Si ce n'est pas le
cas, il faut corriger les lignes au début.

Je penses que la logique du cache de donnée pourrait être généralisée.
Pour ce cas précis, le cache HTTP est spécifique à un client, avec un cache de données, les suivants profiteront du premier martyr.

M.

* Mathieu Lecarme <mathieu@garambrogne.net> [041026 20:08]:

>
>> Pour essayer de traduire, c'est une utilisation de cache de donnée
>> plutot que de résultat, plus morcelé et pas spécifique à une URL ou un
>> utilisateur.
>
> Normalement, le js_rubriques utilise le cache HTTP. Si ce n'est pas le
> cas, il faut corriger les lignes au début.

Je penses que la logique du cache de donnée pourrait être généralisée.
Pour ce cas précis, le cache HTTP est spécifique à un client, avec un
cache de données, les suivants profiteront du premier martyr.

bon mon intervention n'est pas de polémiquer mais plutot d'ouvrir la vue
à une réalité. J'aiactuellement l'occasion de pouvoir etre en
mode 'NRV' concernant le remplissage global de la base et voir aussi
comment se comporte l'ensemble, de travailler dans le sens de la
performance d'affichage. Car oui je suis plutot à militer pour le temps
machine minimal et la sous-charge serveur,
aussi mon style pourra heurter certains, ce n'est pas la ma volonté. Il
vaut mieux heurter avant qu'apres une finale Imho.

Tchuss,

/lex

* Antoine <antoine@pitrou.net> [041026 19:16]:

> Pour essayer de traduire, c'est une utilisation de cache de donnée
> plutot que de résultat, plus morcelé et pas spécifique à une URL ou un
> utilisateur.

Normalement, le js_rubriques utilise le cache HTTP. Si ce n'est pas le
cas, il faut corriger les lignes au début.

cela confirme ainsi le fait qu'avant aujourd'hui je n'ai pu remarquer ce
bon lag au chargement. jusqu'alors, Je check.

Quand à cette boucle récursive, elle reste une bonne artillerie
qu'on pourrait améliorer en utilisant ce fameux B-tree, pourquoi pas dans le
lab ?

l'intéret d'avoir collé un arbre a part des mots clés, ca devient
finalement aussi cela, en lui ajoutant par exemple un champ 'type', on
pourrait stocker n'importe quoi reclamant une arborescence dedans, et
passer par des appels fondamentaux pour reconstituer ainsi n'importe
quel arbre à utiliser dans spip

++a.lex

Quand à cette boucle récursive, elle reste une bonne artillerie
qu'on pourrait améliorer en utilisant ce fameux B-tree, pourquoi pas dans le
lab ?

J'ai cependant toujours du mal à imaginer que cette rafale de requêtes
MySQL (très simples et utilisant des index) produise un tel temps
d'exécution. Je crois qu'il faudrait faire un test en supprimant les
appels à typo(), s'il y en a : le traitement des champs <multi> semble
absolument prohibitif. Un petit "bench" rapide de ce côté-là nous
donnerait des pistes de résolution...

a+

Antoine.