• Resuelto manuelfr

    (@manuelfr)


    Buenas,

    estoy teniendo problemas con un sitio web (de bastante volumen tanto en contenido como en visitas) en el que de vez en cuando el servidor parece caerse y la web queda inactiva durante un momento. Está recién migrada a un nuevo alojamiento y estoy tratando de atajar estos problemas con la gente de soporte, pero indagando he identificado una SQL que a veces se acumula por decenas, que tarda en ejecutarse y que ha legado a provocar caídas de servicios.

    La consulta en cuestión es esta:

    SELECT DISTINCT post_title, ID, post_type, post_name FROM wp_posts wposts
    LEFT JOIN wp_postmeta wpostmeta ON wposts.ID = wpostmeta.post_id
    LEFT JOIN wp_term_relationships ON (wposts.ID = wp_term_relationships.object_id)
    LEFT JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
    WHERE (post_type=’page’ OR (wp_term_taxonomy.taxonomy = ‘category’ AND wp_term_taxonomy.term_id IN(65)))
    AND post_status = ‘publish’ AND LENGTH(post_title)>=5
    ORDER BY LENGTH(post_title) ASC LIMIT 500

    Entiendo lo que quiere hacer, pero el hecho de que su ejecución no sea constante, sino que se acumula a veces sin una razón concreta (no tiene por qué coincidir con un alto número de visitas) me tienen un poco mosca por si fuera algún plugin que a veces intenta hacer algo raro.

    ¿Alguien puede arrojarme algo de luz o aconsejarme alguna comprobación que hacer?

    Gracias de antemano

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • Moderador Fernando Tellado

    (@fernandot)

    Gracias por la mención @fernandot

    @manuelfr, por lo que veo en esa consulta:

    * Lo primero es que devuelve 500 resultados 🙁
    * Realiza 3 left join (si está todo en la BD bien optimizado no debería haber problema)
    * Realiza un cálculo de los que tienen el título de más de 4 caracteres (cinco o más caracteres)
    * Los ordena por longitud del título
    * Busca las páginas o los que están en la categoría con Id 65

    Esto a grandes rasgos, pero sin tener los índices necesarios y dependiendo de la cantidad de datos que tenga tu base de datos, todo hace pensar que esta consulta será muy lenta y se irán acumulando en cola.

    Yo lo que haría aparte de optimizar la base de datos, es localizar el plugin que realiza dicha consulta y desactivarlo a no ser que se imprescindible ya que puede llegar a parar tu sitio web.

    Puedes desactivar los plugins condicionalmente sólo para tu IP o tu usuario e ir viendo resultados, Fernando Puente explica esta técnica en el siguiente post: https://ayudawp.com/carga-condicional-plugins/

    Saludos.

    Iniciador del debate manuelfr

    (@manuelfr)

    Algunos días después, que me ha llevado tiempo mascar todo esto, gracias @fernandot y @carloslongarela por vuestros comentarios. No me ha servido para descubrir mi problema, pero sí para comprobar algunas cosas y aplicar algunas optimizaciones.

    Finalmente, viendo como estaba hecha la consulta me dio por buscar algunas palabras claves en el código de todos los plugins instalados y…el culpable es SEO Smart Links, algo que habían instalado otros compañeros y cuyo funcionamiento al detalle yo desconocía. Y bueno, digamos que..me parece un plugin un poco bestia para un sitio tan grande como este…

    Lo dicho, muchas gracias!

    Saludos

    Hola @manuelfr viendo que https://wordpress.org/plugins/seo-automatic-links/ no se ha actualizado en los últimos 6 años, sólo te recomendaría encarecidamente que lo eliminases cuanto antes, además del problema de las consultas lentas, es un tema básico de seguridad.

    Saludos.

    Iniciador del debate manuelfr

    (@manuelfr)

    Sí…ese ha sido el siguiente comentario a los compañeros. Gracias!

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • El debate ‘Consulta SQL bloquea phpMyAdmin’ está cerrado a nuevas respuestas.