Lo que hace un índice

·

Como ayer comenté, a veces las decisiones de actualizar software y tal quizá no sean las mejores, aunque lo flipante es que una gilipollez consiga tirarte una máquina y llevar locos a los técnicos de un ISP.

Estos días ando ayudando a migrar un proyecto que estaba antes en HTML con PHP que llamaba y tal, y que ya era ingestionable, y decidimos pasarlo a SQL, recuperando del HTML la información importante y como CMS decidimos utilizar WordPress.

El problema nos lo hemos encontrado al tener más de 21.000 posts y una base de datos que ocupa más de 250 megas. La cuestión es que no tenía sentido que se cayera cada dos por tres el servidor, el Apache, el mySQL y todo en reacción en cadena… Al final, más movimientos han hecho que los del ISP se quejen diciendo que se había jodido la máquina…

Total, al final, como el tema estaba en que había muchas «query_slow» he pedido que activen el log y me he puesto a mirar que era… y la solución ha sido una de las mayores tonterías del mundo… algo que ha hecho que una máquina con 4 procesadores que iba al 95% de media antes haya pasado a un 50% de CPU, y que los 2 GB de memoria que estaba antes al 98% ocupados hayan quedado al 60%.

¿Cómo es posible que un campo de la base de datos de WordPress con el que se ordenan cientos de consultas no esté indexada? Pues sí, ha sido mano de santo.

Tan sólo hay que ejecutar esto en el SQL y se solucionan algunos problemas, sin que afecte a la configuración inicial de WordPress. Por cierto, cuidado con el «prefijo» de la tabla, que según como lo hayáis dado de alta puede o no ser el mismo.

ALTER TABLE wp_posts ADD INDEX (post_date)

En fin, si alguien que utiliza o desarrolla WordPress me puede decir porqué eso no está indexado, se lo agradecería enormemente… porque estoy pensando en avisar para que se incluya de serie… porque en grandes cantidades de información esto muere. Básicamente es que el «listar entradas» del panel, hace un ORDER BY post_date

Comments

5 respuestas a «Lo que hace un índice»

  1. Avatar de Jota

    Hola,
    He visto tu twitteo y he entrado a leer tu post. Lo encuentro más que interesante… vital para uno de nuestros proyectos. Proyecto que este año sobrepasará ampliamente esos 21.000 post (probablemente el doble) en WP. Así que lo voy a mirar ahora mismo.
    Mil gracias, Javier.
    Un cordial saludo.

  2. Avatar de Enrique Dans
    Enrique Dans

    No será porque post_date no es un int?

    Los índices deben ser INTs porqe sino se crean tablas enormes.

  3. Avatar de Javier Casares

    Es una opción interesante lo de que sea o no INT… de todas formas, el ordenar fechas tampoco debería ser problemas, ya que al final, una fecha es un número y es «fácil de ordenar»…

    Aquí el problema está en que si se cambian las fechas de DATETIME a INT, ahora habrá que reprogramar más cosas de WordPress… y eso ya es más difícil que simplemente poner un índice…

    1. Avatar de Javier Casares

      A ver, ha mejorado muchísimo, aunque sigue yendo algo mal en conjunto… pero en vez de caerse la máquina cada 6 horas se cae cada 3 días… 🙂

      El panel de WordPress es pesado, no está bien hecho, y creo que ahí es donde se debería trabajar ahora, en vez de tantas funcionalidades pijas… que al final lo usan sólo unos pocos… en cambio el «añadir o editar o listar» contenidos va mal, y es algo muy habitual…

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *