Una de las lecciones que se propagó por la blogósfera hispanoparlante tras el caos producido por los anuncios de alto consumo de CPU por parte de WordPress es la importancia de mantener una base de datos optimizada. Sin embargo, como bloggers, seguramente pasamos más tiempo frente a un formulario para escribir posts que preocupándonos de este tipo de detalles. Por suerte, existen formas de automatizar este proceso.
¿Por qué optimizar?
Fue Marcos Sader quien destacó el peso fundamental de esta acción: en su post sobre “acelerar” WordPress, reporta un descenso en el consumo de CPU de alrededor de 200 minutos tras optimizar la base de datos. Pero ¿qué es esto, en definitiva?
Yo mismo no lo se muy bien, por lo que me he remitido a la documentación de MySQL, en el que nos indican lo siguiente:
OPTIMIZE TABLE
debe ser usado si ha borrado una gran parte de una tabla o si ha hecho muchos cambios a una tabla con filas de longitud variable (tablas que tienen columnasVARCHAR
,BLOB
oTEXT
). Los registros borrados son mantenidos en una lista enlazada y las subsecuentes operacionesINSERT
reusan las posiciones de los registros anteriores. Puede utilizarOPTIMIZE TABLE
para reclamar ese espacio inutilizado y para desgragmentar el archivo con los datos.MySQL 3.23, 4.0, 4.1 Reference Manual :: 13.5.2.5 OPTIMIZE TABLE Syntax
Optimizar automáticamente
Debo apuntar que este método se basa en el uso de Cron, un administrador regular de procesos en segundo plano (“demonio”) que ejecuta programas a intervalos regulares (por ejemplo, cada minuto, dÃa, semana o mes)
, por lo que sólo servirá a quienes tengan acceso a SSH u otra forma de instalar trabajos periódicos. Dicho esto, los pasos para instalar un trabajo que optimize nuestra base de datos periódicamente son los siguientes:
- Primero, debemos crear un archivo que contenga las instrucciones para optimizar nuestra base de datos. Llamémosle
optimize.sql
, y lo dejaremos en nuestro directorio de usuario (generalmente, algo asà como/home/usuario/
- Las instrucciones que debe contener ese archivo son las siguientes:
USE basededatos;
OPTIMIZE TABLE 'wp_categories' , 'wp_comments' , 'wp_linkcategories' , 'wp_linkfeeds' , 'wp_links' , 'wp_options' , 'wp_post2cat' , 'wp_postmeta' , 'wp_posts' , 'wp_users';Esas son todas las tablas que tiene por defecto una instalación de WordPress (y quizás alguna que se me haya pasado y que sea de algún plugin). Por supuesto, hay que cambiar basededatos por el nombre de tu base de datos.
- Lo siguiente es crear el cron. Para ello, nos conectamos vÃa SSH y tecleamos crontab -e.
- Una vez ahÃ, creamos el cronjob, de una manera similar a la siguiente:
* * * * 4 mysql -u usuario_de_mysql -p password_de_mysql -h mysql.example.com </home/usuario/optimize.sql >/dev/null 2>&1
Todo esto debe ir en una sola lÃnea, reemplazando los valores que correspondan (en negritas) por los que correspondan a nuestro caso.
- Guardamos el trabajo, y listo. Podemos comprobar si quedó instalado ejecutando crontab -l
- El ejemplo citado hace que todos los jueves se ejecute el archivo optimize.sql, el que optimiza las tablas de nuestra instalación de WordPress. En caso de tener más tablas que las que vienen por defecto (lo que sucede, por ejemplo, si tienes instalado el plugin Bad Behavior) sólo debes agregarla a la lista. Esto es especialmente recomendable en casos de plugins anti-spam o de estadÃsticas.
Eso es todo. Ojalá les sirva. Si alguien sabe otros métodos (quizás con el plugin WP-Cron) o encuentra algún error, ¡no duden en comentarlo!