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.