Fast query cache es un motor de caché nativo de PolarDB que mejora las consultas por segundo (QPS) en cargas de trabajo con predominio de lecturas. Almacena los conjuntos de resultados en la caché y atiende las consultas repetidas directamente desde la memoria, sin necesidad de analizar sintácticamente, optimizar ni ejecutar el SQL de nuevo.
Funcionamiento
Cuando se ejecuta una consulta, fast query cache almacena su conjunto de resultados. Si la misma consulta se vuelve a ejecutar antes de que cambien los datos subyacentes, se devuelve de inmediato el resultado almacenado en la caché. La caché se invalida automáticamente cuando se modifican los datos.
Fast query cache resuelve tres limitaciones principales de la caché de consultas nativa de MySQL:
|
Limitación |
Cómo lo resuelve fast query cache |
|
Cuello de botella de concurrencia: la caché de consultas nativa de MySQL usa un bloqueo global que serializa el acceso bajo alta concurrencia. Esto degrada aún más el rendimiento conforme aumenta la cantidad de núcleos de CPU. |
Fast query cache reemplaza el bloqueo global con un mecanismo de sincronización sin bloqueos. Así, varios núcleos de CPU procesan consultas en paralelo sin contención. |
|
Recuperación deficiente de memoria: la caché de consultas nativa de MySQL preasigna un bloque de memoria fijo y no lo recupera de manera eficiente, lo que deja la memoria subutilizada. |
Fast query cache utiliza asignación dinámica de memoria para recuperar de inmediato las entradas de caché no válidas. De este modo, mantiene un uso de memoria ágil y flexible. |
|
Degradación del rendimiento con índices de aciertos bajos: la caché de consultas nativa de MySQL añade sobrecarga que puede ralentizar las consultas cuando el índice de aciertos de la caché es bajo. |
Fast query cache supervisa los índices de aciertos de la caché en tiempo real y ajusta su política de almacenamiento dinámicamente. Con esto, mantiene un rendimiento estable incluso si bajan los índices de aciertos o la carga de trabajo combina lecturas y escrituras. |
La caché de consultas nativa de MySQL se eliminó en MySQL 8.0. Fast query cache es el reemplazo diseñado específicamente para PolarDB.
Versiones compatibles
Fast query cache está disponible en a continuación versiones de revisión de PolarDB for MySQL:
|
Versión de PolarDB |
Versión de revisión mínima |
|
PolarDB for MySQL 8.0 |
8.0.1.1.5 |
|
PolarDB for MySQL 5.7 |
5.7.1.0.15 |
|
PolarDB for MySQL 5.6 |
5.6.1.0.29 |
Para comprobar la versión de revisión de su clúster, consulte Query the engine version.
Cuándo usar fast query cache
Fast query cache ofrece la mayor ventaja en los siguientes casos:
La carga de trabajo tiene predominio de lecturas, es decir, muchas más lecturas que escrituras.
Las consultas se repiten con frecuencia, lo que mantiene alto el índice de aciertos de la caché (por encima de ~60 %).
Grandes volúmenes de solicitudes de lectura concurrentes se benefician de la atención desde la memoria.
Evite habilitar fast query cache, o establézcalo en el modo DEMAND, en estos escenarios:
El rendimiento de escritura es alto o los datos cambian con frecuencia. Habilitar la caché en este escenario puede reducir el QPS aproximadamente un 2 %.
Pocas consultas se repiten, por lo que el índice de aciertos de la caché se mantiene bajo.
Habilitar fast query cache
Cada especificación de clúster de PolarDB incluye una capacidad de memoria preasignada para fast query cache. Para habilitar esta función, establezca el parámetro correspondiente en la configuración de su clúster o nodo. Para obtener instrucciones, consulte Specify cluster and node parameters.
|
Versión de PolarDB |
Parámetro |
Valor que debe establecer |
|
PolarDB for MySQL 8.0 |
|
|
|
PolarDB for MySQL 5.6 o 5.7 |
|
|
Gestionar fast query cache
Controlar el comportamiento de la caché con loose_query_cache_type
Use loose_query_cache_type para controlar si fast query cache está siempre activo, es opcional o está deshabilitado. Establezca este parámetro a nivel de clúster o anúlelo a nivel de sesión para cargas de trabajo específicas.
|
Valor |
Comportamiento |
|
|
Fast query cache está deshabilitado. |
|
|
Fast query cache está activo para todas las consultas. Agregue |
|
|
Fast query cache está inactivo de forma predeterminada. Agregue |
Elija el modo que coincida con su carga de trabajo:
Alto rendimiento de escritura o actualizaciones frecuentes de datos: use
OFFpara evitar la sobrecarga de la caché.Muchas consultas lentas repetidas o un índice de aciertos de caché alto: use
ONpara maximizar las ganancias de QPS.Carga de trabajo mixta donde solo algunas consultas se benefician: use
DEMANDy agregueSQL_CACHEa las consultas que se repiten con frecuencia:
SELECT SQL_CACHE id, name FROM customer;
Controlar la duración de las entradas de caché con query_cache_lease_time
Fast query cache recupera la memoria de forma dinámica. Si un conjunto de resultados almacenado en la caché no recibe referencias durante el tiempo que especifica query_cache_lease_time (en segundos), se libera la entrada de caché y se recupera su memoria.
El valor predeterminado es 3600 segundos (1 hora).
Pruebas de rendimiento
A continuación se muestra una prueba de rendimiento que refleja el impacto en el QPS al habilitar fast query cache (PolarDB-QC) frente a deshabilitarlo (QC-OFF).
Entorno de prueba:
|
Parámetro |
Valor |
|
Clúster |
PolarDB for MySQL 8.0 Cluster Edition, 8 núcleos, 64 GB de memoria |
|
Memoria de caché |
4 GB |
|
Herramienta de prueba |
Sysbench |
|
Datos de prueba |
25 tablas × 40 000 filas; 25 tablas × 400 000 filas |
|
Casos de prueba |
|
Todos los resultados se basan únicamente en el nodo principal.
Resumen de resultados:
|
Escenario |
Índice de aciertos de la caché |
Cambio en QPS |
|
Índice de aciertos alto (casos 1, 3, 4, 5, 7) |
63 %–99 % |
+53 % a +106 % |
|
Índice de aciertos bajo (casos 2, 6) |
Bajo |
-3 % o menos |
|
Tráfico mixto de lectura y escritura |
— |
-2 % o menos |
El caso 7 (oltp_point_select especial, 400 000 filas) alcanza un índice de aciertos de la caché del 99 % y muestra la mayor mejora de QPS.
Casos de prueba y gráficos:
Caso 1: 25 tablas × 40 000 filas, rand-type = special, oltp_read_only

Caso 2: 25 tablas × 40 000 filas, rand-type = uniform, oltp_read_only

Caso 3: 25 tablas × 40 000 filas, rand-type = special, oltp_point_select

Caso 4: 25 tablas × 40 000 filas, rand-type = uniform, oltp_point_select

Caso 5: 25 tablas × 400 000 filas, rand-type = special, oltp_read_only

Caso 6: 25 tablas × 400 000 filas, rand-type = uniform, oltp_read_only

Caso 7: 25 tablas × 400 000 filas, rand-type = special, oltp_point_select

Caso 8: 25 tablas × 400 000 filas, rand-type = uniform, oltp_point_select

Caso 9: 25 tablas × 400 000 filas, rand-type = special, oltp_read_write

Compatibilidad
Fast query cache es compatible con la función de consistencia global (modo de alto rendimiento). Sin embargo, si fast query cache y la consistencia global (modo de alto rendimiento) están activos al mismo tiempo, y además se habilita la optimización MTT para la consistencia global (modo de alto rendimiento), la optimización MTT queda inactiva.
Para obtener más información sobre la consistencia global (modo de alto rendimiento), consulte Overview.