Realmente depende de tu carga de trabajo.
para la parte L
- obtener mucha memoria
- si puede superar los 4 GB, vaya a 64 bits.
- para particiones donde su contenido, registros y datos MySQL son opciones de montaje: noatime, nodiratime.
- use unidades físicas / conjuntos de incursiones separadas, idealmente mantenga datos SQL, registros, contenido que sirve, cada uno en un husillo separado.
para la parte A de su pila, bueno, tal vez desee reemplazarlo por completo con nginx o lighthttpd , o tal vez simplemente dejar Apache para contenido dinámico y tener un servidor separado (como esos dos o mathopd ) para contenido estático. Echa un vistazo aquí para más opciones. Si va a ejecutar Apache y otro servidor en el mismo cuadro, una segunda dirección IP será útil. Para disminuir la latencia para el usuario final, use http / 1.1 con keep-alive. Considere usar un CDN para contenido estático.
para la parte M de su lámpara, eche un vistazo a mysqlperformanceblog . desde lo alto de mi cabeza:
- registrar consultas lentas,
- dar suficiente memoria
- considere usar innodb.
- si tiene mucho texto para buscar, use sphinx y tenga un trabajo por lotes que reconstruya el índice.
- considere matar consultas que duran más de XYZ segundos. Es mejor molestar al 1% de los usuarios que derribar todo el sitio en la hora pico. Pero eso realmente depende si procesa transacciones en efectivo o muestra buenas fotos.
- use memcached si puede, para almacenar en caché el resultado de consultas SQL más "caras". Recuerde invalidar la memoria caché cuando cambie el contenido de SQL. Por otro lado, tengo bastantes sitios donde todos los datos se ajustan cómodamente en la memoria y para eso MySQL es increíblemente rápido y no hay necesidad de caché adicional.
para P
- Establecer el tiempo de espera de ejecución para los scripts.
- considere usar un poco de acelerador PHP / caché de código de operación. Estaba bastante satisfecho con xcache , pero ahora no lo uso.
- si tiene un procesamiento intensivo de la CPU: guarde en caché los resultados y almacénelos en SQL o memcached
Realmente no es un consejo de rendimiento, pero tome copias de seguridad fuera del sitio. De Verdad.
Realmente sugiero separar MySQL y Apache / PHP en dos máquinas diferentes.
Por ejemplo, tuve una máquina (C2D E6600) que siempre aumentó a 2.0 y por encima del promedio de carga. Puse MySQL en una segunda máquina (P4C 3Ghz) y después de eso, ambos promedios de carga no superaron 0.2-0.3. Así que pasé de un sitio realmente lento a un sitio rápido con dos servidores que tienen mucho margen de rendimiento.
fuente
Para la parte P, podría considerar el almacenamiento en caché de opcode con, por ejemplo, APC . También se podría considerar mod_fastcgi con php en lugar del mod_php predeterminado.
fuente