MySQL Query Cache para todos

Servidores
Un básico para los que tienen servidores, obviamente para hostings es esencial tener el caché de MySQL activo, pero algunos no lo tienen, me sorprende.

Pero no sólo para proveedores sirve, para desarrolladores "in house" es muy importante tenerlo activo. Sucede que la versión "community" del MySQL no tiene activo el Query Caché y, entonces, la respuesta del servidor local no es la misma que el de nuestro hosting.

Lo que hace esta opción del MySQL es conservar las consultas más comunes y así no tener que repetir resultados. Por ejemplo la portada de este blog, cada minuto varias personas entran y es exactamente la misma. Uno podría guardar en caché todo el HTML y servirlo a gusto, pero si hay cambios en algunas secciones... es complicado, ahora bien, si guardamos cada query a la base de datos y si no hubo cambios... es mucho más fácil!

El ambiente ideal sería donde todo lo cacheable sea cacheado :D (que palabrerío) ya que el Query Cache, como su nombre indica, sólo se encarga de Querys a la base de datos, específicamente SELECTS sin subselects, sólo cuando son exactamente las mismas consultas y un largo etcétera de pros y contras que pueden leer en este excelente artículo recomendable para todo DBA novato en MySQL.

Hay que tener cuidado con el tamaño, algunos creen que un caché enorme es mejor, pero no es así. Una caché muy grande provocaría que al ser invalidada se bloquee todo un query, se tenga que limpiar, volver a cargar, etc. Es ideal para manejar querys repetitivos e iguales, por eso daba como ejemplo la portada del blog.

Chequeando si tenemos Query Cache activado:
mysql> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| have_query_cache | YES   |
+------------------+-------+

Verificando el tamaño:
mysql> SHOW VARIABLES LIKE 'query_cache_size';
+------------------+----------+
| Variable_name    | Value    |
+------------------+----------+
| query_cache_size | 67108864 |
+------------------+----------+
1 row in set (0.00 sec)


Si queremos modificar las opciones hay que editar el archivo my.conf

query-cache-type = 1

esta opción habilita el caché, el 2 sería "on demand" (en el query se especifica que se usa caché) y el 0 es apagado

query_cache_size=32M

el tamaño en Megabytes, yo uso hasta 64Mb o 32Mb

Luego se reinicia el servidor y listo, ya está el caché. Hagan la prueba en un servidor local, instalen un Wordpress o un PHP BB, si tienen una base llena mejor, y hacen la prueba, la diferencia de velocidad es gigante.

Más info en la web oficial, también para configurarlo

Si te gustó esta nota podés...
Invitame un café en cafecito.app

Categoría: Programación Etiquetas:  

Otros posts que podrían llegar a gustarte...

Comentarios

  • j0an    

    buenisimo fabio!
    yo hace un tiempito luche con esto y el mysql cache soluciono mucho del rendimiento! 100% recomendado por default!

    • Responder
    • Citar
    • Comentado:
  • Magui    

    Es esencial que lo escribas sin doble "c".

    • Responder
    • Citar
    • Comentado:
  • Muy recomendado esto, al igual que utilizar herramientas como Slow query logs y "comandos" como EXPLAIN para hacer debug de las querys al igual que mantener bien armados los indices de MySQL.

    • Responder
    • Citar
    • Comentado:
  • Anakayama    

    Fabio:

    Seguro que viene con Query Cache desactivado?

    De todas formas, Query Cache es un cache bastante pobretón, ya que es limpiado cuando se escribe o modifica algo en la tabla.

    Es decir: Modificás un post de tu blog y eso invalida todo el cache sobre esa tabla.

    Saludos

    • Responder
    • Citar
    • Comentado:
  • Fabio    


    Anakayama dijo:

    Fabio:

    Seguro que viene con Query Cache desactivado?

    De todas formas, Query Cache es un cache bastante pobretón, ya que es limpiado cuando se escribe o modifica algo en la tabla.

    Es decir: Modificás un post de tu blog y eso invalida todo el cache sobre esa tabla.

    Saludos


    tal cual, por eso no tiene mucho sentido un caché enorme (más de 64Mb) porque a cada rato se invalida. Sin embargo ante un "digg effect" lo mejor es tenerlo encendido.

    En la mayor cantidad de hits del blog no hay cambios, si sólo el 10% comenta (cuando comenta se genera un cambio) tenés un 90% de chances de necesitar exactamente lo mismo que el visitante anterior.

    Es cuestión de costo beneficio, en un query que cambia su resultado a cada rato ni te conviene tenerlo cacheado, es inútil, pero como eso no pasa tan seguido, lo mejor es usarlo. Todo depende del tipo de aplicación, claro.

    • Responder
    • Citar
    • Comentado:
  • El Tavo    

    Solo comento para romper el 10%

    • Responder
    • Citar
    • Comentado:
  • Johncross    

    buena info para un ignorante en el tema como yo
    Me entero que lo tengo activado, y que el tamaño lo tengo en 0 (me fije con el mysql-front, ya que odio el phpmyadmin)

    y para complicarme más la vida no lo tengo en apache. Ya veré como me las arreglo.

    Otra vez gracias por la data :D

    • Responder
    • Citar
    • Comentado:
    • Revisado: 11/06/2009 - 18:14:10
  • Papilleta    

    Muy bueno, gracias por la información Fabio

    • Responder
    • Citar
    • Comentado:
  • Los servidores siempre funcan mejor cuando se los cachetea... son hijos del rigor!

    • Responder
    • Citar
    • Comentado:

Deje su comentario:

Tranquilo, su email nunca será revelado.
La gente de bien tiene URL, no se olvide del http/https
Para evitar bots, si se tardó mucho en leer la nota seguramente no sirva y tenga que intentar dos veces

Negrita Cursiva Imagen Enlace


comentarios ofensivos o que no hagan al enriquecimiento del post serán borrados/editados por el administrador