Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Depurar consulta time out - Error loading module MySQL server...

Estas en el tema de Depurar consulta time out - Error loading module MySQL server... en el foro de Mysql en Foros del Web. Hola. Tengo un problema con MySQL. Cuando carga la página me sale el error que puse más abajo. He llamado al proveedor de hosting y ...
  #1 (permalink)  
Antiguo 30/01/2013, 10:36
 
Fecha de Ingreso: noviembre-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 5
Depurar consulta time out - Error loading module MySQL server...

Hola. Tengo un problema con MySQL. Cuando carga la página me sale el error que puse más abajo. He llamado al proveedor de hosting y me comenta que es un problema al leer los datos. Dice que tarda tanto tiempo en leerlo que da este erro. Un problema de "time out" me dijeron. La solución es depurar el tiempo de consulta. Alguien me puede decir como podría hacerlo?


Error loading module MySQL server has gone away SQL=SELECT m.id, m.title, m.module, m.position, m.content, m.showtitle, m.params, mm.menuid FROM qq3v9_modules AS m LEFT JOIN qq3v9_modules_menu AS mm ON mm.moduleid = m.id LEFT JOIN qq3v9_extensions AS e ON e.element = m.module AND e.client_id = m.client_id WHERE m.published = 1 AND e.enabled = 1 AND (m.publish_up = '0000-00-00 00:00:00' OR m.publish_up <= '2013-01-30 16:30:16') AND (m.publish_down = '0000-00-00 00:00:00' OR m.publish_down >= '2013-01-30 16:30:16') AND m.access IN (1,1) AND m.client_id = 0 AND (mm.menuid = 0 OR mm.menuid <= 0) AND m.language IN ('en-GB','*') ORDER BY m.position, m.ordering
Error loading component: com_content, 1
Error loading component: com_content,
  #2 (permalink)  
Antiguo 30/01/2013, 11:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Depurar consulta time out - Error loading module MySQL server...

Por empezar, ordenemos esa consulta como para que sea entendible:
Código MySQL:
Ver original
  1.     m.id,
  2.     m.title,
  3.     m.module,
  4.     m.position,
  5.     m.content,
  6.     m.showtitle,
  7.     m.params,
  8.     mm.menuid
  9.     qq3v9_modules AS m
  10.     LEFT JOIN qq3v9_modules_menu AS mm ON mm.moduleid = m.id
  11.     LEFT JOIN qq3v9_extensions AS e ON e.element = m.module AND e.client_id = m.client_id
  12.     m.published = 1
  13.     AND e.enabled = 1
  14.     AND (m.publish_up = '0000-00-00 00:00:00' OR m.publish_up <= '2013-01-30 16:30:16')
  15.     AND (m.publish_down = '0000-00-00 00:00:00' OR m.publish_down >= '2013-01-30 16:30:16')
  16.     AND m.access IN (1,1)
  17.     AND m.client_id = 0
  18.     AND (mm.menuid = 0 OR mm.menuid <= 0)
  19.     AND m.language IN ('en-GB','*')
  20. ORDER BY m.position, m.ordering
Ahora podemos ver que es una consulta que tiene el potencial de generar un producto cartesiano, ya que hace un fullscan por cada tabla para poder realizar esas comparaciones, y si las mismas son demasiado grandes el resultado es.. calamitoso.
Es uno de los problemas de el LEFT JOIN, pero también de operaciones de tipo "<=". Cualquier condición con operadores que impliquen inecuaciones genera un fullscan.
A esto hay que sumarle, por lo menos, que ORDER BY es una de las cláusulas que más asesina la performance, en especial cuando la respuesta de la consulta ya es un producto cartesiano.

Creo que deberás optimizar eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 30/01/2013, 11:06
 
Fecha de Ingreso: noviembre-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 5
Respuesta: Depurar consulta time out - Error loading module MySQL server...

Y como se optimiza?
  #4 (permalink)  
Antiguo 30/01/2013, 11:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Depurar consulta time out - Error loading module MySQL server...

Y hay que ver algunas cosas:
- ¿Es totalmente necesario que devuelva todo el contenido de qq3v9_modules, aunque no tenga coincidencias con el resto de las tablas?
- ¿Los campos "publish_up" y "publish_down" son nullables? ¿Hay índices sobre ellos?
- ¿Los campos "element" y "client_id" de la tabla qq3v9_extensions tienen índices?
- ¿Algunos de los campos indicados en el WHERE está indexado?
- ¿Cómo es posible que un objeto llamado menuid sea negativo? ¿Por qué es negativo algo que parece un identificador?
- ¿Un valor como client_id en la tabla qq3v9_extensions puede cer cero (0)? si es una relación opcional, el campo debería ser nulable, y no contener un valor invalidante.

Cosas como esas pueden cambiar el comportamiento de todo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 30/01/2013, 11:57
 
Fecha de Ingreso: noviembre-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 5
Respuesta: Depurar consulta time out - Error loading module MySQL server...

gnzsoloyo te envié un privado
  #6 (permalink)  
Antiguo 30/01/2013, 22:04
 
Fecha de Ingreso: noviembre-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 5
Respuesta: Depurar consulta time out - Error loading module MySQL server...

He subido la web a otro hosting y no tengo ese problema. Por qué en este hosting no pasa?
  #7 (permalink)  
Antiguo 13/02/2013, 08:17
 
Fecha de Ingreso: noviembre-2011
Mensajes: 103
Antigüedad: 13 años
Puntos: 5
Respuesta: Depurar consulta time out - Error loading module MySQL server...

Parecía solucionado, pero no. Acepto ofertas para solucionar este problema.

Etiquetas: depurar, join, loading, module, select, sql, time
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:36.