Optimizar MySQL para WordPress

6 Comments

Un blog o sitio en wordpress activo recibe trafico y publicacion de articulos a diario, este es el uso comun de un blog, pero tambien ocasiona que MySQL crezca y crezca provocando lentitud en el servicio.

Como blogger nos mantenemos mas escribiendo nuestros articulos que pensando en como optimizar nuestro blog de WordPress. Aun asi es necesario mantener optimizada la base de datos.

¿Cuando y Por que optimizar?

Una base de datos grande y sin optimizar se vuelve lenta y consume mas memoria y ciclos del CPU. Cuando se ha borrado registros de una tabla, sobre todo si contiene filas de longitud variable (VARCHAR, BLOB, TEXT) se dejan muchos espacios en blanco. Al utilizar el comando OPTIMIZE TABLE se recupera el espacio inutilizado y se desfragmenta el archivo de datos.

Optimizar automáticamente la base de datos

Hay varias formas de optimizar y lograr recuperar la velocidad del MySQL, desde la consola hasta herramientas graficas como phpmyadmin.
Para nuestro fin crearemos un archivo de comandos el cual sera ejecutado por el administrador de procesos Cron.

Creamos el archivo optimizar.php dentro del directorio scripts. Como contenido de este script copiamos y pegamos las instrucciones para la optimizacion automatica del MySQL. Bajo privilegios de root el script buscara todas las bases de datos en el servidor y las optimizara automaticamente.

Solo es necesario cambiar la varias de conexion ($h, $u, $p). Puede ser ejecutador desde un navegador (Firefox, Mozilla, Opera, Internet Explorer).
El script anterior optimizara ademas de las tablas por defecto de la version 2.7 de WordPress otras tablas de plugins y demas bases de datos.

archivo: optimizar.php
<?php
echo '<pre>' . "nn";
set_time_limit( 100 );

$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
$start = $time;

//Connection variables :
$h = 'localhost';
$u = 'root';
$p = 'password';

$dummy_db = 'mysql';

/*The php->mysql API needs to connect to a database even when executing scripts like this.
If you got an error from this(permissions),
just replace this with the name of your database*/

$db_link = mysql_connect($h,$u,$p);

$res = mysql_db_query($dummy_db, 'SHOW DATABASES', $db_link) or die('Could not connect: ' . mysql_error());
echo 'Found '. mysql_num_rows( $res ) . ' databases' . "n";
$dbs = array();
while ( $rec = mysql_fetch_array($res) )
{
$dbs [] = $rec [0];
}

foreach ( $dbs as $db_name )
{
echo "Database : $db_name nn";
$res = mysql_db_query($dummy_db, "SHOW TABLE STATUS FROM `" . $db_name . "`", $db_link) or die('Query : ' . mysql_error());
$to_optimize = array();
while ( $rec = mysql_fetch_array($res) )
{
if ( $rec['Data_free'] > 0 )
{
$to_optimize [] = $rec['Name'];
echo $rec['Name'] . ' needs optimization' . "n";
}
}
if ( count ( $to_optimize ) > 0 )
{
foreach ( $to_optimize as $tbl )
{
mysql_db_query($db_name, "OPTIMIZE TABLE `" . $tbl ."`", $db_link );
}
}
}

$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
$finish = $time;
$total_time = round(($finish - $start), 6);
echo 'Parsed in ' . $total_time . ' secs' . "nn";
?>
  1. Procedemos a crear el trabajo de cron, tecleando el siguiente comando:
  2. crontab -e.
  3. Ya dentro del editor de cron agregamos:
  4. 0 * * * * /scripts/optimizar.php
  5. Guardamos el trabajo, y listo. Podemos comprobar si quedó instalado ejecutando crontab -l

El trabajo de cron va a ejecutar todos los dias cada hora el script de optimizacion, si esto consume demasiado ciclos del CPU o quizas no es necesario ejecutarlo tantas veces al dia podemos cambiarlo, vean el howto de Cron.

Notas de interes

  • Podemos utilizar WP-Cache o Super cache para reducir el trabajo de PHP para consultar la base de datos MySQL y generar el contenido XHTML, por medio de copias estáticas.
  • Si no utilizan sus plugins, aunque esten desactivados es mejor borrarlos de la carpeta de plunins de WordPress.
  • Para acelerar los procesos de acceso a la base de datos y generacion de temas existe LighPress, un backend para WordPress.

Script para optimizar via | Webdigity

6 Replies to “Optimizar MySQL para WordPress”

  1. Vale, vale, pero… entonces tengo que poner el archivo.php en el cron? ¿Eso funciona? Crei que solo corria los “otros” lenguajes, es decir, archivos bash .sh o sql… Total: ¿Funciona? Gracias!

  2. Hola! He llegado hasta aqui por el San Google, pero me parece que hay un error. (tal vez)

    Primero me dices de crear el archivo x.php, pero a la hora de meterlo en el cron , me dices que ponga x.SQL ¿no debería ser PHP? graciasss!!

Deja tus preguntas o comentarios