Table mysql à 1Go, 5 millions d'entrée, le serveur rame...

WRInaute discret
Bonjour !!

Voila, j'ai un EG 2007 (reloaded) de chez OVH (soit 2x1,8 Ghz, 2 Go de DDR) et j'ai un gros problème avec Mysql (ce serveur n'est que un serveur mysql).

En effet, j'ai une table d'environ 5 millions d'entrées pesant à peu pres 1,1 Go.

Malgré un parfait choix des clés ... le site rame énormement lorsqu'on lui parle de cette table !
Je viens de voir en plus, par le script d'aide de configuration de mysql que 75% de mes clés sont enregistrées sur le disque dur et non pas dans la ram ...
(d'un autré coté, c'est normal ... je ne vais pas fixé à 2 Go de Ram la quantité de clés enregistrés dans la Ram ... Ca ne laisserait rien a mysql en lui meme....)

D'où ma question : COMMENT je peux faire pour que mysql puisse acceder à cette table sans délai de 1 minute pour chaque demande ?

Parce que prendre un serveur avec 4 Go de Ram, je veux bien, mais ca ne va rien me changer parce que dans 2 mois, il faudra en prendre 8 etc.


Voila, j'espère que vous aurez une solution à mon problème
 
WRInaute impliqué
ya quoi comme données dans la table ?
si c'est des logs tu devrait les archiver. tu regroupe tout les logs d'une journée dans un seul enregistrement.
 
Nouveau WRInaute
Une table de cette taille n'est pas insurmontable. Tout dépend de la manière dont on y extrait les informations. Les performances se dégradent sensiblement dans le cas d'une requête avec un ORDER BY ou un SELECT qui parcourt toutes les lignes de la table.

Il est possible, et à condition de disposer d'une version MySQL récente, de partitionner la table :
http://krierjon.developpez.com/mysql/partitionnement/
 
WRInaute impliqué
Re: Table mysql à 1Go, 5 millions d'entrée, le serveur rame.

benjiman a dit:
Parce que prendre un serveur avec 4 Go de Ram, je veux bien, mais ca ne va rien me changer parce que dans 2 mois, il faudra en prendre 8 etc.

je pense que tu as du te poser la question si tu souhaites accéder rapidement à ses infos mais as tu vraiment besoin de TOUTES ces infos et en temps réel ?

Serait-il tolérable par exemple de n'accéder uniquement à J+1 aux données du jour J ?
Est ce que tu peux découper les données en données utiles et une autre partie moins utile ?
Tu n'as pas d'index FULLTEXT dessus au moins ? car ca ca fait ramer ?

Qu'elle est la nature des opérations que tu fais sur la table ? beaucoup d'insert / update ? si oui cela demande de la part de mysql de mettre à jour ses index ?

As tu des index sur toutes les colonnes ? peux tu supprimer des indexs et en mettre uniquement sur les colonnes qui dispose de foreignkey ?

bref des débuts de réflexions...

ps : c'est quoi comme données qui grossit aussi vite ? archivage de flux rss ?
 
WRInaute passionné
Sujet intéressant, on peut tous y avoir droit un jour.
As tu optimisé tes index ?
Via la console ou phpmyadmin qu'est-ce que te donnes la commande explain devant tes requêtes SQL ?
 
WRInaute passionné
les dernières versions loggent les slow query me semble-t-il

ça devrait dejà te mettre sur une piste

il y a tellement de facteurs qui peuvent freiner tes requêtes

rog
 
Nouveau WRInaute
Les requêtes qui ont accès à ta base de données sont très importantes.
Notre base de données contient plusieurs tables de plus de 1 millions d'enregistrements. Il y a 1 an, nous avons dû revoir complètement toutes les requêtes de notre site. Mysql est capable d'en prendre sans problème mais il faut savoir s'en servir correctement.
Il a fallu revoir toutes les recherches et convertir des champs en FullText. Faire un select sur plusieurs champs en texte peut être pénible pour Mysql. C'est pour ça qu'il ont inventé la clé FullText.
Également, faire des requêtes JOIN , ou encore, des ORDER BY, peut être fastudieux pour Mysql si c'est mal fait.
Il est vrai que notre base de données de notre site est sur un serveur dédié à lui seul mais tout de même, il y a environ 22 millions de requêtes par jour sur notre base de données et il se comporte très bien
 
Discussions similaires
Haut