viernes, 6 de febrero de 2009

MySQL query cache

Vale: ya tienes tu web subversionada y con un sistema para hacer deploys en producción.
¿Qué necesitas ahora? Un DEBUG! Tienes que ver cuánto tiempo tarda en cargarse la página. Menos de medio segundo está bien y menos de un segundo es razonable... si tarda más, mira dónde falla.

Pon contadores usando microtime() en diversos puntos de la página

list($usec, $sec) = explode(' ',microtime());
$cronometro['punto de interés 1'] = ((float)$usec + (float)$sec);


Reescribe o cachea las partes del código que tarden más

Y registra el tiempo que tarda cada consulta de MySQL. Si ves que hay consultas lentas usa EXPLAIN para ver por qué son lentas. Si no puedes optimizarlas y se repiten a menudo, asegúrate de que tu servidor de MySQL tiene la query_cache activada (SHOW VARIABLES LIKE 'query_cache_size'; tiene que ser > 0).

Si no está activa, usa SET GLOBAL query_cache_size = 524288; para activarla. Le he puesto 512 MB de RAM asignada a la query cache: si no tienes un servidor dedicado no sé si podrás hacer esto :-)

Es INCREÍBLE el efecto que esto tiene sobre el rendimiento.

OJO! al hacer cualquier ALTER, INSERT o UPDATE de la tabla se pierde la caché. Así que si usabas algún campo "hits" para registrar accesos a páginas de la web o similar, ya estás normalizando eso y poniéndolo en otra tabla por separado.

No hay comentarios: