2008-10-08 17 views
271

Estoy probando la velocidad de algunas consultas en MySQL. La base de datos está guardando en caché estas consultas, lo que me dificulta obtener resultados confiables al probar la rapidez de estas consultas.MySQL: fuerza para no usar el caché para probar la velocidad de la consulta

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

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

Gracias

Respuesta

454

Trate de usar la opción SQL_NO_CACHE (MySQL 5.7) en su consulta. (MySQL 5.6 usuarios hacen clic en HERE)

por ejemplo.

SELECT SQL_NO_CACHE * FROM TABLE 

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

+5

[Documentación] (http: // dev. mysql.com/doc/refman/5.0/en/query-cache-in-select.html) –

+4

Un buen artículo sobre mysql Query Cache. ¡Cómo configurar y ver el caché en acción! Vale la pena leer. http://www.databasejournal.com/features/mysql/article.php/3110171/MySQLs-Query-Cache.htm –

+1

Antes de tratar de 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 problema, puede ayudar a muchas personas. – dellasavia

21

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

RESET QUERY CACHE 
+9

Esto es probablemente excesivo ... idealmente, solo quieres que MySQL ignore temporalmente el caché. – BMiner

+2

También necesita permisos especiales para esto. –

2

Si desea desactivar la caché de consulta de conjunto de la 'query_cache_size' a 0 en el archivo de configuración de MySQL. Si su conjunto 0 mysql no usará el caché de consultas.

17

Un problema con el método

SELECT SQL_NO_CACHE * FROM TABLE 

es que parece que sólo para evitar que el resultado de la consulta de ser cacheada. 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, lo que afectará sus resultados. Continúo investigando maneras de solucionar esto, editaré esta publicación si encuentro una.

+0

Eso es exactamente lo que quiere. Al punto de referencia. –

+1

Pero si tu caché está llena por otros, tendrás la ilusión de ser rápido. Pero a veces no. – karatedog

30

Existe también la opción de configuración: query_cache_size = 0

Para desactivar la caché de consultas al arrancar el servidor, establezca la variable de sistema query_cache_size a 0. Al desactivar el código de caché de consultas, no hay ninguna sobrecarga notable. Si compila MySQL desde el origen, las capacidades del caché de consultas se pueden excluir completamente del servidor invocando configure con la opción --without-query-cache.

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

+1

Esta respuesta debería tener más votos positivos. – samvermette

91

Otra alternativa que afecta solo a la conexión actual:

SET SESSION query_cache_type=0; 
+2

@Mike ¿puede ser más específico? También tenga en cuenta que su comando desactiva la caché de consultas para ** todos los usuarios del servidor hasta que se reinicie **, ¡que podría no ser lo que usted desea! El mío lo configurará para la sesión actual. –

+0

Mi mal. Fue 'query_cache_size' que estaba viendo, no' query_cache_type'. Estaba mezclando la tuya y la respuesta de SeniorDev. – Mike

+1

+1 para deshabilitar la memoria caché para toda la sesión actual! – snooze92

3

El uso de una variable definida por el usuario dentro de una consulta hace que la consulta se vuelva incable. Lo encontré un indicador mucho mejor que usar SQL_NO_CACHE.Sin embargo, usted debe poner la variable en un lugar donde el valor de la variable no afectaría seriamente el rendimiento:

SELECT t.* 
FROM thetable t, (SELECT @a:=NULL) as init; 
+2

"Me pareció un indicador mucho mejor que el uso de' SQL_NO_CACHE'. " ¿Cómo es eso? Parece que necesitaría un caso bastante fuerte 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. – Air

+1

@ Air encontré que esta solución funciona mejor que SQL_NO_CACHE también. 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

10

que haría uso de lo siguiente:

SHOW VARIABLES LIKE 'query_cache_type'; 
SET SESSION query_cache_type = OFF; 
SHOW VARIABLES LIKE 'query_cache_type'; 
Cuestiones relacionadas