Superbouba Posté 20 Juin 2007 Posté 20 Juin 2007 Bonjour, J'ai besoin d'aide afin d'optimiser mon serveur dédié pour qu'il puisse accueillir sans problème les 14-15 000 visiteurs journaliers (700 connectés aux heures de pointes). Le problème actuel se trouve sur mysql qui consomme 99% du CPU trop régulièrement... Il n'y a presque pas de requêtes lentes (une toute les 5 minutes qui prend 3-4 secondes, pas plus). Je bosse depuis longtemps sur mon site et je l'ai optimisé avec le temps, index bien placés, etc... mais là je ne sais plus trop quoi faire de plus. Ne me dites pas de changer de serveur, je pense qu'il est largement suffisant (Xéon 2x2.66Ghz, 4Go RAM). Bref, si vous pouviez m'aider, je vous en remercie. ( de la pub ou autre est possible en retour)
Spidetra Posté 20 Juin 2007 Posté 20 Juin 2007 1) Commence par regarder le système de cache de requête de mysql : http://dev.mysql.com/doc/refman/5.0/fr/query-cache.html 2) Ensuite intéresse toi aux différents système de cache de page
Superbouba Posté 20 Juin 2007 Auteur Posté 20 Juin 2007 Un système de cache ne m'est pas d'une très grande utilité... Mon site est un jeu en ligne où chacun est connecté sous sa session et où les mêmes requêtes ne reviennent pas fréquemment. (pour les classements, c'est des fichiers html réactualisés par cron pour encore diminuer le nombre et la charge)
pluriels Posté 20 Juin 2007 Posté 20 Juin 2007 peut-être optimiser les requêtes ? As-tu un exemple de requête "complexe" ?
Superbouba Posté 20 Juin 2007 Auteur Posté 20 Juin 2007 (modifié) Je n'ai pas beaucoup de requêtes complexes... sinon il serait "facile" de les modifier ou de modifier les bases. Par page, il y a entre 3 et 6 requêtes. Le problème est qu'il y a en moyenne 1 000 000 pages vues chaque jour... Phpmyadmin m'indique 167 requêtes par secondes... Modifié 20 Juin 2007 par Superbouba
pluriels Posté 20 Juin 2007 Posté 20 Juin 2007 Tout d'abord félicitations pour le trafic, je dois faire la même chose en 40 ans ! je suppose que tu y es déjà allé. http://dev.mysql.com/doc/refman/5.0/fr/mys...timization.html 7.3. Verrouillage de tables 7.4. Optimiser la structure de la base de données 7.5. Optimiser le serveur MySQL
Superbouba Posté 20 Juin 2007 Auteur Posté 20 Juin 2007 Oui, y'a déjà un moment que j'essaye d'optimiser un maximum... En fait, on peut dire que j'ai toujours eu des problèmes de surcharges... mon code a été optimisé (ou complètement revu) des centaines de fois, les serveurs ont également bien évolué, mais le trafic également... lol Ce problème mysql est en fait assez récent (autrefois, c'était la RAM qui manquait), depuis que je suis passé sur un serveur plus puisant, il n'y a plus qu'un seul processus mysql alors qu'auparavant, il y en avait plusieurs. Les ralentissements ne sont pas aussi grave qu'autrefois (les pages ne mettent pas 20 secondes à s'afficher) mais la charge du serveur est importante et tourne en moyenne autour de 4 aux heures de pointes. Hors j'aimerai bien une charge de 1 et un site fluide...
f_trt Posté 20 Juin 2007 Posté 20 Juin 2007 Des pistes uniquement ou des idées mais tu as surement du déjà y penser: Tu dis ne rien pouvoir faire au niveau de cache ne connaissant pas ton système nous te croyons maintenant tu peux peut-être séparé ton serveur en deux, un pour apache php et un second pour mysql. Autre piste qu'en est-il des accès disque, tu as peut-être la possibilité d'éclater ta base en deux pour répartir sur deux bases et deux disques. Maintenant dernière piste faire toi même un sytème de hashage et de gestion sans passer par mysql pour seulement les trucs qui doivent être hyper rapide ou qui reviennent hyper souvent.
Superbouba Posté 20 Juin 2007 Auteur Posté 20 Juin 2007 Un second serveur ? j'y ai pensé mais ne suis pas encore décidé. En principe, un serveur comme le mien devrait faire l'affaire, j'aimerai donc exploiter son potentiel (sans le surcharger biensûr). Eclater ma base en deux ? J'en ai déjà deux mais une est peu utilisée, la plus utilisée a une centaine de tables. Devrais-je séparer de celle-ci les tables du forum (PunBB) ? (c'est le plus simple à faire, séparer d'autres tables demanderaient pas mal de réflexion et de modifications dans le code) Je ne suis pas très optimiste sur les résultats mais on peut toujours essayer. Créer un système de hachage et de gestion me paraît bien complexe... je ne serai comment m'y prendre.
dièse Posté 23 Juin 2007 Posté 23 Juin 2007 Tu dis ne rien pouvoir faire au niveau de cache ne connaissant pas ton système nous te croyons Le cache de requête MySQL est très simple à mettre en place (quelques secondes) et est très simple à optimiser en fonction de son utilisation (n*quelques secondes). C'est dommage de ne pas essayer .
smile Posté 23 Juin 2007 Posté 23 Juin 2007 (modifié) Eclater ma base en deux ? J'en ai déjà deux mais une est peu utilisée, la plus utilisée a une centaine de tables. Ce n'est pas tes bases qui sont importantes, tu peux avoir un grosse base avec multitudes de tables, ca ne devrait pas jouer sur les performances, mais tes tables, plus elles sont petites, plus c'est performant, logique Plus elles sont grosses, plus il y'a des acces diques, c'est cela qui fait monter ton cpu, si t'arrives à reduire les acces disques, ca va améliorer, voir aussi au niveau matèriel un disque plus rapide peut etre. Voir aussi les requètes, plus elles sont complexes jointures, goup by, plus le cpu grimpe. Et peut etre changer la priorité des processus mysql. Modifié 23 Juin 2007 par smile
Superbouba Posté 25 Juin 2007 Auteur Posté 25 Juin 2007 Merci pour ces réponses. Ma base de données fait 2.5Go. Les principales tables utilisés ont entre 130 et 150 000 enregistrements (de 66 à 130 octets par enregistrement, format fixe). J'ai lu quelque part que plus il y a de tables dans une base de données, moins la performance est rapide car il y a davantage de fichiers .frm... et donc le disque met plus de temps à l'atteindre. Mais cela doit être tout de même négligeable et 100 tables, c'est pas si énormes. Niveau disque dur, c'est SATA2 RAID HARD 1 (2x250Go), ce qui est plutôt pas mal. Il y a beaucoup de jointures oui, mais les index sont bien positionnés et elles sont rapides. Le cache MySql, je l'ai déjà mis en place et il fonctionne (pour le vérifier simplement, dans phpmyadmin, lancez une requête, vous verrez un temps d'exécution par exemple de 0.006 secondes, relancez-la et elle s'éxécute en 0.0001 seconde). Mais cela ne change rien au problème présent... Qcache queries in cache 1790 Qcache inserts 184529877 Qcache hits 39010098 Qcache lowmem prunes 0 Qcache not cached 1346561 Qcache free memory 131517272 Qcache free blocks 1370 Qcache total blocks 5015 Bref, ça fonctionne mais comparé au grand nombre de requêtes ayant lieu, c'est très peu 1790 requêtes en cache. Comment changer la priorité du processus mysql ? Je ne suis pas sûr de l'impact vu qu'il occupe 99% du CPU en pleine charge...
Superbouba Posté 31 Août 2007 Auteur Posté 31 Août 2007 Mon problème est toujours présent... personne pour m'aider ?
Petitmur Posté 5 Septembre 2007 Posté 5 Septembre 2007 Regarde du côté de l'extension mysqli qui est plus puissante et plus rapide. Tu peut aussi essayer d'optimiser tes requetes en regardant les champs les plus utilisés avec la commande EXPLAIN que tu met devant le SELECT, il te donnera des conseils d'optimisations. Tu peut aussi regarder du côté de SQLite qui est trés rapide.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant