Aller au contenu

Recherche aide pour optimisation


Superbouba

Sujets conseillés

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)

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

Posté (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é par Superbouba
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Tu dis ne rien pouvoir faire au niveau de cache ne connaissant pas ton système nous te croyons

:nonono:

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 ;).

Lien vers le commentaire
Partager sur d’autres sites

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é par smile
Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

  • 2 months later...

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.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...