La caché de consultas almacena en memoria los conjuntos de resultados de las instrucciones SELECT. De este modo, las consultas idénticas omiten por completo el análisis sintáctico y la ejecución, ya que el resultado se devuelve directamente desde la caché. Esto reduce el uso de CPU, disminuye las IOPS y acorta los tiempos de respuesta en cargas de trabajo con muchas lecturas, pocas escrituras y datos estables. En cargas de trabajo con muchas escrituras o patrones de consulta variados, la sobrecarga por invalidar la caché puede reducir el rendimiento general. Por lo tanto, pruebe esta función con su carga de trabajo real antes de habilitarla en producción.
Cuándo usar la caché de consultas
La caché de consultas ofrece mejores resultados cuando se cumplen todas estas condiciones:
Los datos de las tablas cambian poco o son estáticos.
La misma instrucción SELECT se ejecuta de forma repetida.
Los conjuntos de resultados de las consultas son menores a 1 MB.
La caché de consultas no siempre resulta beneficiosa. En cargas de trabajo con escrituras frecuentes en las tablas o consultas muy variadas, la sobrecarga de invalidar y volver a llenar la caché puede reducir el rendimiento general. Pruebe esta función con su carga de trabajo real antes de habilitarla en producción.
Cómo funciona
ApsaraDB RDS for MySQL calcula un valor hash para cada instrucción SELECT que recibe de un cliente.
Si el hash coincide con una entrada almacenada, el resultado se devuelve de inmediato. La consulta no se analiza ni se ejecuta.
Si no hay coincidencia, la consulta se ejecuta con normalidad. El hash y el resultado se guardan en la caché.
Cuando cambia alguna tabla, se invalidan y eliminan de inmediato todas las consultas almacenadas que hacen referencia a dicha tabla.
Limitaciones
Las siguientes consultas no se almacenan en la caché:
Consultas que solo difieren en mayúsculas y minúsculas, espacios en blanco, contexto de base de datos, versión del protocolo o juego de caracteres. Estas se tratan como consultas distintas y se almacenan por separado.
Conjuntos de resultados de subconsultas. Solo se almacena el conjunto de resultados final de la consulta externa.
Consultas ejecutadas dentro de una función almacenada, un procedimiento almacenado, un trigger o un evento.
Consultas que llaman a cualquiera de estas funciones no deterministas:
now(),curdate(),last_insert_id()orand().Consultas que hacen referencia a tablas de la base de datos
mysql,information_schemaoperformance_schema.Consultas que hacen referencia a tablas temporales.
Consultas que generan advertencias.
Consultas que contienen
SELECT … LOCK IN SHARE MODE,SELECT … FOR UPDATEoSELECT * FROM … WHERE AUTOINCREMENT_COL IS NULL.Consultas que hacen referencia a una variable definida por el usuario.
Consultas que usan la sugerencia
SQL_NO_CACHE.
Configurar la caché de consultas
Establezca estos tres parámetros en ApsaraDB RDS console:
|
Parámetro |
Valor predeterminado |
Descripción |
|
|
— |
Controla si la caché está activa. |
|
|
3 MB |
Memoria total asignada a la caché, en bytes. Debe ser múltiplo de 1024. |
|
|
1 MB |
Tamaño máximo del conjunto de resultados para una sola consulta almacenada, en bytes. Los resultados mayores a este valor no se almacenan. |
En el panel de navegación izquierdo, haga clic en Parameters. En la lista de parámetros, busque query_cache_type y cambie su valor al deseado. El cambio surte efecto únicamente después de reiniciar la instancia. También puede modificar otros parámetros relacionados según sus necesidades, como query_cache_limit (valores válidos: de 1 a 1048576) y query_cache_size (valores válidos: de 0 a 104857600). Haga clic en el ícono de información junto a un parámetro para consultar su descripción.
Cambiar query_cache_type provoca un reinicio automático de la instancia de RDS. Si establece query_cache_size con un valor que no es múltiplo de 1024, la consola devuelve el error The specified parameter is invalid, cuyo código de error es InvalidParameters.Malformed.
Habilitar y deshabilitar la caché
La caché se habilita cuando query_cache_size > 0 y query_cache_type es 1 o 2.
La caché se deshabilita cuando query_cache_size = 0 o query_cache_type = 0.
Recomendaciones
No asigne un tamaño excesivo a
query_cache_size. Una caché demasiado grande le quita memoria a otras estructuras de la instancia y aumenta la sobrecarga de las búsquedas. Comience con un valor entre 10 MB y 100 MB, según el tipo de instancia, y ajústelo después con base en el uso observado.Para activar o desactivar la caché de consultas, ajuste el valor de
query_cache_sizeen lugar dequery_cache_type. Los cambios enquery_cache_typesurten efecto solo después de reiniciar la instancia.La caché de consultas beneficia únicamente a ciertas cargas de trabajo. Pruébela a fondo con su carga de trabajo real antes de habilitarla, para evitar degradación del rendimiento u otros problemas.
Supervisar y comprobar el rendimiento de la caché
Consultar las estadísticas de la caché
Ejecute la siguiente instrucción para revisar el uso de la caché:
SHOW GLOBAL STATUS LIKE 'Qcache%';
El resultado incluye estas variables de estado:
|
Variable |
Descripción |
|
|
Número de consultas atendidas desde la caché |
|
|
Número de consultas agregadas a la caché |
|
|
Número de consultas que no se pudieron almacenar |
|
|
Número de consultas almacenadas actualmente en la caché |
Ejemplo de resultado:
mysql>show global status like 'Qca%';
+-------------------------+------------+
| Variable_name | Value |
+-------------------------+------------+
| Qcache_free_blocks | 2763 |
| Qcache_free_memory | 10115160 |
| Qcache_hits | 365589713 |
| Qcache_inserts | 612280336 |
| Qcache_lowmem_prunes | 1257159 |
| Qcache_not_cached | 1805250864 |
| Qcache_queries_in_cache | 9318 |
| Qcache_total_blocks | 22409 |
+-------------------------+------------+
Comprobar el funcionamiento desde la consola de ApsaraDB RDS
En el panel de navegación izquierdo, elija Autonomy Service (formerly CloudDBA) > Performance Trends. Consulte la gráfica MySQL CPU/Memory Utilization y compruebe que el uso de CPU y de memoria se mantengan dentro del rango normal.