Le prix était correct et un peu plus de 100 $ par mois, je eu une belle serveur avec 2 Go de mémoire, 500 Go de bande passante mensuelle, un processeur rapide tout à moi-même, à l'abus que je vois fit.Fast impatience UFC 77. Vous voyez je lance un site web qui fait des prédictions et les résultats de l'UFC UFC. Sur la nuit de combat, le site peut obtenir assez occupé, mon record précédent était de 18.000 visiteurs dans les 3 heures ou plus que les combats se déroulent. Mon compte d'hébergement mutualisé jamais eu de problème avec cette charge, du moins pas autant que je pourrais dire.
Cependant, avec l'UFC 77 sur mon nouvel hébergement dédié compte mon serveur a frappé un mur de briques. La CPU est à 100% et il y avait 200 processus apache tous en lice pour le CPU et la mémoire disponible. Immédiatement, je commencé à chercher des raisons et, plus important solutions. Trois jours plus tard, je pense que je dois la plupart de mon answers.It est important de savoir que Go Daddy était pas en faute, je demandai une boîte avec certaines spécifications et ce est exactement ce qu'ils me donnaient, complète avec tous les logiciels qu'ils ont dit. MySQL, PHOP 4.3.9 et Apache 2.0.52.
Donc, je commencé à regarder (quand le serveur se calma) ce qui se passait quand un utilisateur a demandé une page. La première chose que je remarque est que le processus apache actuelle faudrait environ 5% du CPU, je ne faisais pas attention à combien de temps il a couru. La prochaine chose que je l'ai noté est que mysql aurait également prendre CPU importante, si seulement pour une courte période de temps. Il est important de savoir que lors de l'UFC 77 MySQL prenait environ 50% de CPU pour toute la période de pointe. Le temps de chercher quelque optimizations.For mon site, où il ya 20.
000 visiteurs en 3 heures et peut-être 10 mises à jour pendant ce temps, la mise en cache serait évidemment utile. Je remarquai que les recherches sur le Web Apache a une certaine mise en cache et même mieux certains min mise en cache, mais il est pas considéré comme prêt pour la production dans la construction 2.0.52 que je dois, si je ai écarté cette idée assez rapidement. Je ne vois cependant certaines choses quand je regardais l'optimisation MySQL optimizations.The de MySQL plus important que je trouve est l'option query_cache_size.
Vous voyez, MySQL a ce concept de requête de mise en cache, voici une explication simple. Si je fais une requête simple, saySELECT customer_name du client où customer_id> 10 (je sais, une requête stupide) En général, la base de données passe par tout cela est magique et retourne l'ensemble des noms de clients qui est id sont supérieures à 10. Pour de résultat cette requête ne serait pas très long, mais le plus complexe de la requête la plus qu'il faudrait.
Cependant, avec MySQL requête mise en cache, le résultat de cette requête serait gardé en mémoire, ainsi que la requête elle-même, ce qui signifie que la prochaine fois que la même requête a été exécutée la base de données serait juste vérifier que pas de tables dans la requête ont été modifiées, puis regarder le résultat dans la mémoire et de lui redonner. Ceci est beaucoup plus rapide. MySQL a la mise en cache de requête activée par défaut, mais la variable query_cache_size est réglé sur 0, essentiellement de désactiver la fonction.
Pour l'activer, vous devez faire: query_cache_size = 64M dans my.cnfNote: Je également augmenté ma query_cache_limit à 4M et mon thread_cache_size à 384. Il ya beaucoup d'autres options de MySQL que vous pouvez définir pour améliorer la performance, pour trouver un bon livre ou MySQL peut-être je vais poster certains d'entre eux sur mon blog open source dépôt à www.open-source-depot.com/blog.After l'établissement de ces options dans my.
cnf vous aurez besoin de redémarrer MySQL, étant que je suis une sorte de impatient et je ne l'aime processus de redémarrage je suis allé à la ligne de commande MySQL et définissez les options globales. Pour une raison quelconque l'64M n'a pas fonctionné pour moi là-bas, donc je utilisé l'expansé (octets) versioni.e mysql> SET GLOBAL query_cache_size = 60000000; pour voir ce qui se définie, faire: mysql>