El precio era justo y por poco más de $ 100 al mes tengo un servidor agradable con 2 GB de memoria, 500 GB de ancho de banda mensual, una CPU rápida a todos a mí mismo, al abuso, como veo fit.Fast adelante a UFC 77. Ves Tengo un sitio web que hace predicciones UFC y resultados de UFC. En la noche del combate, el sitio puede ser bastante ocupado, mi récord anterior era de 18.000 visitantes en los 3 o más horas que las peleas se llevan a cabo. Mi cuenta de alojamiento compartido nunca tuvo un problema con esta carga, al menos no por lo que yo podría decir.
Sin embargo, con el UFC 77 en mi nuevo alojamiento dedicado cuenta de mi servidor chocó contra un muro de ladrillo. La CPU estaba al 100% y había 200 procesos apache todos compitiendo por la CPU y la memoria disponible. Inmediatamente empecé a buscar razones y lo más importante de soluciones. Tres días más tarde, creo que la mayor parte de mi de importante answers.It tengo que saber que Go Daddy no tuvo la culpa, pedí una caja con ciertas especificaciones y eso es exactamente lo que me dieron, completa con todo el software, dijeron. MySQL, PHOP 4.3.9 y Apache 2.0.52.
Así que me puse a buscar (cuando el servidor se calmó) a lo que sucedía cuando un usuario solicita una página. La primera cosa que noté fue que el proceso de apache actual tomaría alrededor del 5% de la CPU, no le presté atención a cuánto tiempo pasó. Lo siguiente que noté fue que mysql también tomaría CPU significativa, aunque sólo sea por un corto período de tiempo. Es importante saber que durante el UFC 77 MySQL tomaba aproximadamente 50% de la CPU para todo el período de intensa actividad. Es hora de buscar alguna optimizations.For mi sitio, donde hay 20.
000 visitantes en 3 horas y tal vez 10 cambios durante ese tiempo, el almacenamiento en caché, obviamente, sería útil. Me di cuenta de buscar en la web que apache tiene alguna almacenamiento en caché y mejor aún algunos minutos de almacenamiento en caché, sin embargo no se considera listo para producción en el 2.0.52 build que tengo, así que descarté esa idea con bastante rapidez. Sin embargo, me di cuenta de algunas cosas cuando miré a MySQL optimizations.The más importante optimización de MySQL que he encontrado es la opción query_cache_size.
Usted ve, MySQL tiene este concepto de almacenamiento en caché de consulta, aquí hay una explicación sencilla. Si hago una consulta simple, saySELECT-cliente del cliente donde customer_id> 10 (lo sé, una consulta tonta) En general, la base de datos va a través de todos es la magia y vuelve de nuevo el conjunto de resultados de todos los clientes nombres Quien Está id son mayores de 10. Para esta consulta no tomaría mucho tiempo, pero cuanto más compleja es la consulta más tiempo tomaría.
Sin embargo, con MySQL caché de consulta, el resultado de esa consulta se mantendría en la memoria, junto con la propia consulta, lo que significa que la próxima vez que la misma consulta se ejecutó la base de datos sería simplemente comprobar que no hay tablas en la consulta han cambiado y después buscar el resultado en la memoria y dar de nuevo. Esto es mucho más rápido. MySQL tiene el almacenamiento en caché de consultas activado por defecto, pero la variable query_cache_size se establece en 0, esencialmente desactivar la función. Para activarlo hay que hacer: query_cache_size = 64M en my.
cnfNote: Yo también aumenté mi query_cache_limit a 4M y mi thread_cache_size a 384. Hay muchas otras opciones de MySQL que se pueden establecer para mejorar el rendimiento, buscar un buen libro MySQL o tal vez voy a publicar algunos de ellos en mi blog de código abierto depósito en www.open-source-depot.com/blog.After establecer esas opciones en my.cnf tendrás que reiniciar MySQL, es que estoy un poco impaciente y no me gusta el reinicio de los procesos que fui a la línea de comandos de MySQL y defina las opciones globales.
Por alguna razón el 64M no funcionó para mí allí, así que utiliza el ampliado (bytes) versioni.e mysql> SET GLOBAL query_cache_size = 60000000; para ver lo que está establecido, hacer un: mysql>