Fork me on GitHub






Diminution du nombre de requêtes mysql
Aspirant
Inscrit: 14/01/2005 14:40
Messages: 43
Bonjour à tous,

Je vais vous présenter mon dernier cheval de bataille sur mon site xoopsé ( http://www.becompta.be). Je tiens à préciser que pour ce site, j'ai déjà fait énormément de modification dans le code de base de xoops.
Mais j'essaye pour le moment d'optimiser le nombre de requêtes par pages, car il y en a beaucoup trop.

Pour ce faire j'ai fait une mise au point MYsql/block sur différentes pages pour savoir quels sont les requêtes qui sont faites et qui pourrait être supprimées et ou optimiser. (Le problème, bien que connaissant déjà pas mal l'architecture xoops, je ne sais pas toujours ou chercher)

**Une des premières requêtes que je voudrais bien voir disparaitre uniquement pour les visiteurs anonymes est la requête sur xoops_session car je crois quel ne sert pas à grand chose.
->(je ne sais pas ou modifier pour la supprimer)

** une autre requête qui devrait être optimisée est
SELECT * FROM xoops_smiles
car elle est fait sur plusieurs pages ou c'est complètement inutile, par exemple sur la page de recherche http://www.becompta.be/search.php , http://www.becompta.be/modules/extcal/calendar.php
->(je ne sais pas ou modifier)

** je voudrais aussi supprimer une requête sur les notifications qui perment uniquement de cocher la case si la personne est notifiée au sujet. Cela n'est pas vraiment utile car les membres peuvent de toutes façons voir toutes leurs notifications sur la page http://www.becompta.be/notifications.php
--> j'ai cherché du cote de kernel/notifications.php mais si je supprime la requetes, il n'est plus possible de voir toutes les notifications sur la page www.becompta.be/notifications.php


sur plusieurs module telle que extcal, dictionnaire, et d'autres il y a des requêtes qui sont complètement inutile
SELECT * FROM xoops_modules WHERE dirname = 'pages'
SELECT * FROM xoops_config WHERE (conf_modid = 44) ORDER BY conf_order ASC
SELECT * FROM xoops_bb_forums ORDER BY forum_order
J'aurais bien voulu les supprimer.
Le seul point commun que j'ai trouvé entre les différents modules faisant ces requêtes, c'est que l'on affiche le block "Menu principal" que j'ai déjà modifié pour n'afficher que les sublinks

dans le modules extcal, il y a deux requêtes qui semble similiaire, cela serait peut être bien d'en supprimé une des deux
SELECT * FROM xoops_modules WHERE dirname = 'extcal' (5eme requtes)
SELECT * FROM xoops_modules WHERE mid = 43 (dernières requêtes)

Il y a surement d'autres requêtes qui pourrait être supprimées mais je ne l'ai pas encore identifiées.

Si vous avez la moindre idée ou il serait possible de faire ces modifications, n'hésitez pas de m'aider.

Christophe

Posté le : 09/06/2008 14:33
Partager Twitter Partagez cette article sur GG+
Re: Diminution du nombre de requêtes mysql
Aspirant
Inscrit: 14/01/2005 14:40
Messages: 43
Je me répond car j'ai déjà trouvé une solution pour la requête de la notification qui ne servait pas à grand chose.
modules/system/blocks/system_blocks.php
dans la fonction b_system_notification_show()
mettre en commentaire la ligne suivante
//$subscribed_events =& $notification_handler->getSubscribedEvents ($category['name'], $category['item_id'], $xoopsModule->getVar('mid'), $xoopsUser->getVar('uid'));


include/notification_select.php
mettre en commentaire la ligne suivante
//$subscribed_events =& $notification_handler->getSubscribedEvents($category['name'], $category['item_id'], $xoopsModule->getVar('mid'), $xoopsUser->getVar('uid'));


gain 1 requête par page

Posté le : 09/06/2008 16:52
Partager Twitter Partagez cette article sur GG+
Re: Diminution du nombre de requêtes mysql
Aspirant
Inscrit: 14/01/2005 14:40
Messages: 43
Rebonjour,

Je viens de mettre le module page en caché (0 = caché)(administration/module)
et cela me permet de ne plus avoir ces requêtes
SELECT * FROM xoops_modules WHERE dirname = 'pages'
SELECT * FROM xoops_config WHERE (conf_modid = 44) ORDER BY conf_order ASC

par contre j'ai essayé de faire la même chose pour le module newbb ==> page blanche sur tout le site.

PS pour ceux qui utilise le module pages il est possible de supprimer trois requêtes par pages sur tout le site. J'en parle seulement maintenant car je l'avait déjà fait avant d'écrire le premier message
dans modules/pages/xoops_version.php
mettre en commentaire les trois ligne suivantes
+- ligne 82
//$result2 = $xoopsDB->query("SELECT CID, pagetitle, defaultpage FROM " . $xoopsDB->prefix($modversion['dirname']) . " WHERE defaultpage = '0' AND submenu = 1 AND (publishdate > 0 AND publishdate <= " . time() . ") AND (expiredate = 0 OR expiredate > " . time() . ") ORDER BY weight");

+- ligne 99
//$result = $xoopsDB->query("SELECT submenuitem, titlelink FROM " . $xoopsDB->prefix($modversion['dirname']. "_linktous") . "");

+- ligne 113
//$result2 = $xoopsDB->query("SELECT submenuitem , titlerefer FROM " . $xoopsDB->prefix($modversion['dirname']."_refer") . "");

Posté le : 10/06/2008 12:51
Partager Twitter Partagez cette article sur GG+
Re: Diminution du nombre de requêtes mysql
Aspirant
Inscrit: 14/01/2005 14:40
Messages: 43
>En ce qui concerne la reqête xoops_session
je sais que cela se fait dans le fichier kernel/session.php avec la fonction function write
j'ai essayé de rajouter un truc du genre devant mais cela n'a pas fonctionné
global $xoopsUser;
$surferuid = $xoopsUser->uid();
if ($surferuid>0){

Posté le : 10/06/2008 12:54
Partager Twitter Partagez cette article sur GG+
Re: Diminution du nombre de requêtes mysql
Team FrXoops
Inscrit: 14/05/2004 22:32
Messages: 2554
Bonjour
Interressant, mais il ne s'agit pas tant de diminuer le nombre de requetes que la qualité des requetes je pense.

Par exemple quid des "SELECT * FROM table WHERE id=x" pour récupérer le contenu d'un ou deux champ par exemple.

ou des doubles requete pour récupere les enregistrements d'une table dont une des valeur correspond au contenu d'une table parent. Il y aurait matiere surtout dans les modules, à utiliser les "LEFT JOIN", "RIGHT JOIN", ect.

Et sans compter la structure même des tables ou certains champs sont parfois surdimentionnés sans raison, ou des informations redondantes.

Je ne sais pas un expert SQL mais je me suis rendu compte de l'importance d'une reqête bien formée? Mais ce n'est pas toujours évident.

Bon courage dans tes (re)quêtes.

Posté le : 10/06/2008 14:21

Ne pas perdre patience, même si cela semble impossible, c'est déjà de la patience.
Origami
Conseil des Sages
Sur gitHub
Partager Twitter Partagez cette article sur GG+
Re: Diminution du nombre de requêtes mysql
Team FrXoops
Inscrit: 14/05/2004 22:32
Messages: 2554
re, je rectifie la première phrase:
Interressant, mais il ne s'agit pas tant de diminuer le nombre de requetes que la qualité des requetes je pense.

par

Interressant, mais il ne s'agit pas tant de diminuer le nombre de requetes que améliorer la qualité des requetes je pense.

Posté le : 10/06/2008 14:29

Ne pas perdre patience, même si cela semble impossible, c'est déjà de la patience.
Origami
Conseil des Sages
Sur gitHub
Partager Twitter Partagez cette article sur GG+
Re: Diminution du nombre de requêtes mysql
Aspirant
Inscrit: 14/01/2005 14:40
Messages: 43
Bonjour JJDai,

Je suis tout a fait d'accord avec toi, j'ai déjà d'ailleurs fait quelques modifications dont tu fais mentions.
*utiliser les "LEFT JOIN", "RIGHT JOIN"
-> fait sur les module que j'ai custommisé à ma sauce (c'est a dire le module dictionnaire, article et jobs)
*les champs sont parfois surdimentionnés
->En effet, mais pour cela c'est pas trop compliqué de faire il suffit de se rendre suur une page d'une table xoops dans phpmyadmin et de cliquer sur "Suggérer des optimisations quant à la structure de la table)
* les SELECT * FROM table WHERE id=x
-> ceux la en effet ils posent problème, car dans xoops il y en a énormément

Ma dernière trouvaille permet justement de retirer 5 à 10 requêtes par pages. Sur mon site voici les requetes que j'ai pu retirer
SELECT FROM xoops_modules WHERE (hasmain AND isactive AND weight 0ORDER BY weight ASCmid ASC
SELECT 
FROM xoops_group_permission WHERE (gperm_name 'module_read' AND gperm_modid AND (gperm_groupid OR gperm_groupid 2))
SELECT FROM xoops_modules WHERE dirname 'pages'
SELECT FROM xoops_config WHERE (conf_modid 44ORDER BY conf_order ASC
SELECT 
FROM xoops_bb_forums ORDER BY forum_order

Toutes des vilaines requêtes avec des "SELECT *"


Avec toutes mes opération pour le moment j'ai déjà réussis a diminuer le nombre de requêtes de 10-13 par pages. Ce qui me fait passer à une moyenne de 16 requêtes par page (hormis les modules gourmands).
Je serais curieux de savoir à combien de requêtes vous êtes par pages?


Les dernières requêtes qui pourrait être supprimée sont les suivantes
SELECT FROM xoops_config WHERE (conf_modid 24ORDER BY conf_order ASC
SELECT 
FROM xoops_config WHERE (conf_modid AND conf_catid 3ORDER BY conf_order ASC
SELECT 
FROM xoops_config WHERE (conf_modid AND conf_catid 5ORDER BY conf_order ASC
SELECT 
FROM xoops_smiles

Les trois premières pourrait être groupées, et la dernière pourrait être supprimé de certain module ou elle est inutile

PS pour JJDai merci pour ton encouragement pour ma quête

Posté le : 10/06/2008 16:49
Partager Twitter Partagez cette article sur GG+
Re: Diminution du nombre de requêtes mysql
Xoops accro
Inscrit: 25/02/2004 00:20
De Région parisienne
Messages: 2526
Citation :

cdpdf a écrit:
Je me répond car j'ai déjà trouvé une solution pour la requête de la notification qui ne servait pas à grand chose.
modules/system/blocks/system_blocks.php
dans la fonction b_system_notification_show()
mettre en commentaire la ligne suivante
//$subscribed_events =& $notification_handler->getSubscribedEvents ($category['name'], $category['item_id'], $xoopsModule->getVar('mid'), $xoopsUser->getVar('uid'));


include/notification_select.php
mettre en commentaire la ligne suivante
//$subscribed_events =& $notification_handler->getSubscribedEvents($category['name'], $category['item_id'], $xoopsModule->getVar('mid'), $xoopsUser->getVar('uid'));


gain 1 requête par page


Totalement inutile, il suffit de désactiver la notification pour le ou les modules concernés, et les requêtes ne s'effectuent pas !
Avant de modifier le code source du core, il est nécessaire de se pencher sur le fonctionnement de celui-ci.

Posté le : 12/06/2008 02:04
Partager Twitter Partagez cette article sur GG+
Re: Diminution du nombre de requêtes mysql
Aspirant
Inscrit: 14/01/2005 14:40
Messages: 43
Citation :

DuGris a écrit:

Totalement inutile, il suffit de désactiver la notification pour le ou les modules concernés, et les requêtes ne s'effectuent pas !
Avant de modifier le code source du core, il est nécessaire de se pencher sur le fonctionnement de celui-ci.


J'avoue que j'utilise presque toutes les possibilités de xoops (peut être 80%) et justement sur les 20% restant peuvent être optimisé.

En ce qui concerne l'optimisation de la notification, il y a un proverbe que j'aime bien que je vais raccroché a cette optimisation.
Il est bon d'avoir le beurre, l'argent du beurre et la fermière sans à devoir se taper la belle-mère.
Dans cette exemple le beurre serait d'avoir le système de notification actif. L'argent du beurre serait l'affichage du block de notification. Tandis que la fermière, elle donne la permission au utilisateur de rester en contact.
Et la belle mère est la requête en trop car elle n'apporte pas grand chose au système de notification (juste un petit V dans une case)

Enfin chacun son point de vue, et personnellement je préfère me taper la fermière sans avoir la belle doche derrière

Posté le : 12/06/2008 16:03
Partager Twitter Partagez cette article sur GG+
Re: Diminution du nombre de requêtes mysql
Régulier
Inscrit: 26/02/2007 16:00
Messages: 494
Bonjour Christophe.

Très beau boulot sur ton site! L'url-rewriting est très correct (dommage que tu ais laissé un niveau de / en trop à mon goût, mais je sais ce que cela implique en terme de recodage des modules).

Ton site semble avoir un temps de réponse honnête. Pourquoi veux-tu te casser la tête à optimiser certaines requêtes quand l'époque (notre ère) apporte des hébergements de compétition en dédié à des prix très abordables?

La modification du coeur/noyau est pénalisant pour les évolutions futures car il faudra, toi comme moi, qu'on passe des heures à recoder pas mal de morceaux pour l'url-rewriting. Mais si en plus, on doit réécrire les requêtes SQL à chaque évolution, pffffff, je me pends tout de suite...

Bref, quelle est ton intention première à vouloir optimiser de manière aussi draconienne les requêtes SQL?

Posté le : 20/06/2008 11:05

Portail en aquariophilie avec une passion pour le poisson clown en aquariums récifaux.
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

73 Personne(s) en ligne (57 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 73 | Plus ...