52 votos

¿Cómo puedo usar EXPLICAR a *predecir* el rendimiento de una consulta de MySQL?

Estoy ayudando a mantener un programa que es esencialmente un amistoso de sólo-lectura de front-end para un gran y complicado de base de datos MySQL -- el programa se basa ad-hoc, SELECCIONE las consultas de los usuarios y usuarias de entrada, envía consultas a la base de datos, se obtienen los resultados, post-procesa y muestra muy bien para el usuario.

Me gustaría añadir alguna forma de razonable/heurística de predicción para la construcción de la consulta del rendimiento esperado -- a veces los usuarios inadvertidamente hacer las consultas que, inevitablemente, va a tomar un tiempo muy largo (ya que van a volver enormes conjuntos de resultados, o porque son "ir contra la corriente" de la forma en que el DB es el índice) y me gustaría ser capaz de mostrar al usuario algunos "poco fiable" información/conjetura acerca de cuánto tiempo la consulta se va a tomar. No tiene que ser perfecto, siempre y cuando no te quedes tan mal y con frecuencia fuera de sincronismo con la realidad como para causar un "cry wolf" efecto donde los usuarios aprenden a ignorarla;-) Basado en esta información, el usuario puede decidir ir a por un café (si la estimación es de 5 a 10 minutos), ir a comer (si es de 30-60 minutos), matar a la consulta y a probar otra cosa en su lugar (tal vez más estrictos límites a la información que se solicita), etc, etc.

No estoy muy familiarizado con MySQL EXPLICAR declaración, veo a un montón de información sobre cómo utilizarlo para optimizar una consulta o una base de datos de esquema, indexación, etc, pero no se mucho sobre cómo utilizarlo para mi más limitado propósito, simplemente hacer una predicción, teniendo la base de datos como un dado (por supuesto, si las predicciones son bastante confiables me puede eventualmente cambiar a usarlos también para elegir entre formas alternativas en una consulta se pueden tomar, pero, eso es para el futuro: por ahora, me gustaría ser un montón feliz sólo para mostrar el rendimiento de los cálculos aproximados a los usuarios para los fines mencionados).

Alguna sugerencia...?

20voto

Greg Puntos 132247

EXPLICAR no dan ninguna indicación de cuánto tiempo una consulta va a tomar. En el mejor de los que se podría utilizar para adivinar cual de las dos consultas puede ser más rápido, pero a menos que uno de ellos es, obviamente, mal escrita, a continuación, incluso que va a ser muy duro.

También debe ser consciente de que si usted está utilizando sub-consultas, incluso, ejecución de EXPLICAR puede ser lento (casi tan lento como el de la propia consulta, en algunos casos).

Hasta donde yo soy consciente, MySQL no proporciona ninguna manera de estimar el tiempo de una consulta para llevar a cabo. Podría registrar el tiempo de cada consulta tarda en ejecutar, a continuación, construir una estimación basada en la historia de los pasados consultas similares?

11voto

chaos Puntos 69029

Creo que si quieres tener una oportunidad de construir algo razonablemente confiable de esto, de lo que debe hacer es construir un modelo estadístico de tablas de tamaño y rota EXPLICAR el resultado de los componentes correlacionados con la consulta de los tiempos de procesamiento. Tratando de construir un tiempo de ejecución de consulta predictor basado en el pensamiento acerca de los contenidos de EXPLICAR es sólo va a pasar demasiado tiempo dando vergonzosamente buenos resultados antes de que se refinado a la vaga utilidad.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X