Optimisation MySQL - Quelle solution choisir ... ?

Bonjour,

J’ai un moteur de recherche qui travaille sur une table de 4 millions d’enregistrements en requête fulltext (ca ce n’est pas changeable).
J’ai a disposition 3 serveurs (linux, mysql 5, php 5), aujourd’hui c’est comme si un seul de ces serveurs était utilisé.

Les requetes metent parfois beaucoup de temps (quand il y a beaucoup de recherches en cours), je veux donc optimiser tout cela, j’ai pensé a plusieurs solutions :

  • utiliser memcahed, mais vu la diversité des recherches je ne pense pas que cela soit pertinent,

  • exploser la table en plusiseur “sous-” table que je repartirai sur deux serveurs avec le troisieme qui compilerai les deux recordsets, mais cela sous entends de multithreader l’outil et en php cela ne semble pas super faisable …

  • dédier un des serveurs à la base et "prier" pour que cela suffisse …

  • créer un cluster mysql (avec les outils fournis par MySQL AB) … mais cela semble lourd à mettre en place et nécessite des grosses ressources matérielles …

Merce de m’aiguiller … et de me proposer d’autres idées si vous en avez.
Antoine

Tu fais quoi exactement comme recherche? (je ne suis pas spécialiste, loin de ça)

Je me pencherais d’abord sur l’étude de tes besoins : quels sont les recherches faîtes, par qui? par combien? pour qui? etc.

  • Pour le cas de PHP tu as bien une solution, guère plaisante, c’est de coder une extension en C qui ferait ça. Sinon, tu peux passer à Java (<- troll).

  • Pour le dédié, dans l’absolu oui ça serait mieux. Mais il faut aussi envisager des connexions persistantes pour ne pas se connecter à chaque fois au serveur dédié (juste 40 fois, etc).

Ensuite, tu dois certainement avoir des outils pour vérifier ce qui est lent (php? mySQL? etc)

Dans un premier temps tu peux déjà commencer par dédier un serveur au SGBD, pour que le SGBD puisse utiliser toute la ram dispo pour le cache RAM. Essaye d’avoir 4 ou 8 go de RAM. Si tu as genre 500 Ko de RAM tu t’en sortira jamais.

Les autres serveurs doivent etres connectés en réseau privé direct, et non par internet sinon c’est trop lent.

C’est à dire que par exemple si tu as une machine qui sert des processus HTTP, cette machine est connectée via internet, et elle est connectée en réseau direct avec le serveur de base de données, sinon ca créé un temps de latence qui gache tout

Quelques précisions suite aux questions :

Oui oui les serveurs sont dédiés …
En ce qui concerne la RAM je suis un peu juste ils sont à 2 giga … (c’est du poweredge 1800 il me semble).

Oui ils ont chez un hebergeur et ont deux cartes réseau (reeau local + reseau "sauvegarde")

En ce qui concerne qui fait quoi : ce sont les internautes qui font des requetes dessus (environ 5000 / jour) et les domaines sont vastes et on travaille bien en pconnect …

merci de vos réponses

Tu peux aussi tenter de mettre en cache les résultats par session (en gros : une grosse requête bien vilaine, puis du cache php/etc).

puis y’a certains sgbd qui ont des fonctions embarquées qui te permettent d’optimiser tes requêtes [:shy]