MySQL - forzar a no usar caché para probar la velocidad de consulta

343

Estoy probando la velocidad de algunas consultas en MySQL. La base de datos está almacenando en caché estas consultas, lo que me dificulta obtener resultados confiables al probar la rapidez de estas consultas.

¿Hay alguna forma de deshabilitar el almacenamiento en caché para una consulta?

Sistema: MySQL 4 en alojamiento web Linux, tengo acceso a PHPMyAdmin.

Gracias


fuente

Respuestas:

527

Intente usar la opción SQL_NO_CACHE (MySQL 5.7) en su consulta. (Los usuarios de MySQL 5.6 hacen clic AQUÍ )

p.ej.

SELECT SQL_NO_CACHE * FROM TABLE

Esto detendrá el almacenamiento en caché de MySQL de los resultados, sin embargo, tenga en cuenta que otros SO y cachés de disco también pueden afectar el rendimiento. Estos son más difíciles de sortear.

Jarod Elliott
fuente
55
Documentación
Salman von Abbas
44
Un buen artículo sobre mysql Query cache. ¡Cómo configurar y ver el caché en acción! Vale la pena leerlo. databasejournal.com/features/mysql/article.php/3110171/…
Adrian P.
1
Antes de intentar mejorar el rendimiento, intente reiniciar su servidor mysql. Puede ser que algún proceso esté afectando todo. Sucedió conmigo Aunque es un comentario que no tiene conexión directa con el tema, puede ayudar a muchas personas.
dellasavia
2
Esto evita que almacene en caché los resultados, pero ¿también evita que use el caché?
Brett
3
@Brett ve el comentario de SalmanPK allá por el '11. Esa página de documentos tiene literalmente 4 oraciones y responde a su pregunta directamente. En caso de que la página se elimine en el futuro: "No comprueba la memoria caché de la consulta para ver si el resultado ya está almacenado en caché, ni almacena el resultado de la consulta".
maurice
121

Otra alternativa que solo afecta la conexión actual:

SET SESSION query_cache_type=0;
John Carter
fuente
Culpa mía. Estaba query_cache_sizemirando, no query_cache_type. Estaba mezclando la tuya y la respuesta de SeniorDev.
Mike
30

También hay una opción de configuración: query_cache_size = 0

Para deshabilitar la memoria caché de consultas al iniciar el servidor, establezca la variable de sistema query_cache_size en 0. Al deshabilitar el código de la memoria caché de consultas, no hay una sobrecarga notable. Si compila MySQL desde el origen, las capacidades de caché de consultas se pueden excluir por completo del servidor invocando configurar con la opción --without-query-cache.

Ver http://dev.mysql.com/doc/refman/5.1/en/query-cache.html

barbushin
fuente
24

También puede ejecutar el comando seguir para restablecer la caché de consultas.

RESET QUERY CACHE
djt
fuente
99
Esto probablemente sea excesivo ... idealmente, solo desea que MySQL ignore temporalmente el caché.
BMiner
3
También necesita permisos especiales para esto.
Erick Robertson
19

Un problema con el

SELECT SQL_NO_CACHE * FROM TABLE

El método es que parece que solo evita que el resultado de su consulta se almacene en caché. Sin embargo, si está consultando una base de datos que se está utilizando activamente con la consulta que desea probar, entonces otros clientes pueden almacenar en caché su consulta y afectar sus resultados. Continúo investigando formas de evitar esto, editaré esta publicación si descubro una.

wbharding
fuente
1
Pero si otras personas llenan su caché, tendrá la ilusión de ser rápido. Pero a veces no.
karatedog
14

Usaría lo siguiente:

SHOW VARIABLES LIKE 'query_cache_type';
SET SESSION query_cache_type = OFF;
SHOW VARIABLES LIKE 'query_cache_type';
Sergio Costa
fuente
3

El uso de una variable definida por el usuario dentro de una consulta hace que la consulta no se pueda almacenar en caché. Me pareció un indicador mucho mejor que usar SQL_NO_CACHE. Pero debe colocar la variable en un lugar donde la configuración de la variable no afecte seriamente el rendimiento:

SELECT t.*
FROM thetable t, (SELECT @a:=NULL) as init;
nuevo
fuente
3
"Me pareció un indicador mucho mejor que usar SQL_NO_CACHE". ¿Cómo es eso? Parece que necesitaría un caso bastante sólido para usar un truco oscuro sobre una palabra clave explícita, a menos que la palabra clave explícita no esté haciendo lo que dice.
Aire
1
@ Air También encontré que esta solución funciona mejor que SQL_NO_CACHE. SQL_NO_CACHE funcionó por primera vez ejecutando la consulta, pero luego no volvió a funcionar. Supongo que esto se debe a otros mecanismos de almacenamiento en caché. Creo que esto funciona mejor porque una búsqueda que se basa en una variable no puede ser almacenada en caché por ninguna capa o mecanismo, al menos, esa es mi mejor suposición.
Klik
2

Si desea deshabilitar la caché de consultas, configure 'query_cache_size' en 0 en su archivo de configuración mysql. Si se establece 0 mysql no usará la caché de consultas.

Jinesh
fuente