La variable de sistema have_query_cache
indica si la caché de consultas está disponible:
mysql> SHOW VARIABLES LIKE 'have_query_cache'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | have_query_cache | YES | +------------------+-------+
Cuando se usa un binario MySQL 5.0 estándar, este valor
siempre es YES, incluso si el cacheo de
consultas está desactivado.
Muchas otras variables de sistema controlan las operaciones de
la caché de consultas. Pueden especificarse en un fichero
de opciones o en la línea de comandos al arrancar
mysqld. Todas las variables de sistema de la caché
de consultas tienen nombres que empiezan con
query_cache_. Se describen brevemente en
Sección 5.3.3, “Variables de sistema del servidor”, con información
adicional de configuracion dada aquí.
Para especificar el tamaño de la caché de consulta, inicialice
la variable de sistema query_cache_size.
Ponerla a 0 desactiva la caché de consultas. El tamaño por
defecto es 0; esto es, que está desactivada.
Si el tamaño de la caché de consultas es mayor que 0, la
variable query_cache_type influye en su
funcionamiento. Esta variable puede tener los siguientes
valores:
Un valor de 0 o OFF
evita cachear o recibir valores cacheados.
Un valor de 1 o ON
permite el cacheo excepto para aquellos comandos que
empiecen con SELECT SQL_NO_CACHE.
Un valor de 2 o DEMAND
provoca el cacheo de sólo los comandos que empiecen con
SELECT SQL_CACHE.
Inicializar con el valor GLOBAL la variable
query_cache_type determina el comportamiento
de la caché de consultas para todos los clientes que se
conecten tras el cambio. Cada clientes puede controlar el
comportamiento de la caché para su propia conexión meidante el
valor SESSION de
query_cache_type. Por ejemplo, un cliente
puede desactivar el uso de la caché de consultas para sus
propias consultas así:
mysql> SET SESSION query_cache_type = OFF;
Para controlar el tamaño máximo de resultados de consultas
individuales que pueden cachearse, inicialice la variable
query_cache_limit variable. El valor por
defecto es 1MB.
Cuando se cachea una consulta, su resultado (los datos que se envían al cliente) se
guardan en la caché a medida que se reciben.
Por lo tanto los datos normalmente no se guardan en
un gran paquete. La caché reserva bloques para
guardar estos datos bajo demanda, así que cuando se llena un
bloque, se prepara un nuevo bloque. Puesto que la reserva de memoria
es una operación costosa (lenta), la caché de consultas
reserva bloques con un tamaño mínimo dado por la variable de
sistema query_cache_min_res_unit. Cuando la consulta
queda ejecutada, el último bloque de resultados se ajusta
a su tamaño real para liberar la memoria no usada. En función
del tipo de consulta que ejecute el servidor, puede encontrar
útil cambiar el valor de
query_cache_min_res_unit:
El valor por defecto de
query_cache_min_res_unit es 4KB. Debería ser
un valor adecuado para la mayoría de los casos.
Si tiene muchas consultas con resultados pequeños, el
tamaño por defecto del bloque puede llevar a fragmentación
de memoria, que se evidencia con un alto número de bloques
libres. La fragmentación puede obligar a la caché a borrar consultas
por falta
de memoria. En este caso, debe decrementar el valor de
query_cache_min_res_unit. El número de
bloques libres y de consultas borradas debido a falta de
espacio se da en las variables
Qcache_free_blocks y
Qcache_lowmem_prunes.
Si la mayoría de las consultas tienen resultados grandes
(compruebe las variables de estado
Qcache_total_blocks y
Qcache_queries_in_cache ), puede
incrementar el rendimiento incrementando
query_cache_min_res_unit. Sin embargo,
tenga cuidado de no hacerlo demasiado grande (consulte el
punto anterior).
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

