Medir el tiempo real de consulta de MySQL

79

¿Cómo puedo medir el tiempo de ejecución de una consulta sin medir el tiempo que pasa esperando un desbloqueo, etc.? Mi única idea era medir continuamente la misma consulta y registrar el tiempo más rápido.

Mikhail
fuente

Respuestas:

149

Inicie el generador de perfiles con

SET profiling = 1;

Luego ejecute su consulta.

Con

SHOW PROFILES;

verá una lista de consultas para las que el generador de perfiles tiene estadísticas. Y finalmente eliges con qué consulta examinar

SHOW PROFILE FOR QUERY 1;

o cualquier número que tenga su consulta.

Lo que obtiene es una lista donde exactamente cuánto tiempo se dedicó a la consulta.

Más información en el manual.

pantalones de lujo
fuente
¡Esto es excelente! ¿Sabes si esto es lento? es decir, ¿podría agregar esto a mi clase contenedora, para ejecutarlo para cada consulta que se ejecute en mi sitio web?
Mikhail
3
Nunca pensé en eso. ¿Por qué querrías hacer eso? Por lo general, esto es solo para el desarrollo, supongo. Si desea saber qué consultas son lentas, eche un vistazo a su registro de consultas lentas. dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
Fancypants
Porque las consultas toman diferentes cantidades de tiempo para diferentes usuarios. slow-query-log parece contar el tiempo que espera una liberación de bloqueo
Mikhail
1
No es realmente cierto. Esperar un bloqueo también es solo un síntoma de que otra consulta es lenta. Sugiero que elija las consultas en su registro de consultas lentas, ejecútelas con el generador de perfiles para ver dónde pasaron tanto tiempo. Luego, si es posible, mejórelos. Agregue índices en consecuencia, vuelva a escribirlos o reduzca la lectura de datos si la consulta pasa mucho tiempo sending data. O lo que sea necesario para mejorar el rendimiento. No veo ningún sentido en hacer saber a los usuarios por qué tienen que esperar tanto. En realidad no les importa.
fancyPants
No quise mostrar los resultados del perfil a los usuarios. Solo quería capturarlo en vivo y almacenarlo para mis propios fines
Mikhail
37

La respuesta aceptada deja de ser válida ...

SHOW PROFILE[S]están en desuso a partir de MySQL 5.6.7 y se eliminarán en una versión futura de MySQL. En su lugar, utilice el esquema de rendimiento; ver http://dev.mysql.com/doc/refman/5.6/en/performance-schema-query-profiling.html

Rick James
fuente
2
Si Profile te ofrece algo más útil que "enviar datos", te ganas la lotería.
Rick James
1
Estoy usando 5.7.19 y todavía show profilestrabajo correctamente
Siva Praveen
1
@SivaPraveen - OK, por ahora todavía funciona, pero "... será eliminado ..."
Rick James