La mayoría de los sitios web actuales utilizan un gestor de contenidos, que a su vez emplea una base de datos, en el formato MySQL la mayoría, para almacenar y mostrar los contenidos. Cada vez que se hace una solicitud desde un navegador web, y siempre que no esté activado ningún programa de caché, el sistema accede a las tablas para procesar los datos.
Aunque el caché esté activado la base de datos está en continuo procesamiento si el sitio tiene muchas visitas. Continuamente se está guardando y mostrando información. Las tablas de la base de datos se fraccionan y el procesamiento de información se hace más lento y tedioso.
Existen algunas formas de optimizar las tablas con residuo a depurar. La más utilizada y tediosa es accediendo a las bases a través de un gestor, como phpMyAdmin, marcar las tablas a depurar y pulsar sobre la opción de Optimizar la tabla. Pero hay algunas más.
Script para optimizar bases de datos
A continuación mostramos un script en PHP, que debemos guardar en un directorio de nuestro sitio web, que se ocupa de optimizar las tablas de la base de datos alojada en nuestro servidor MySQL.
Después de indicar los datos de acceso al servidor, debemos subir el script, a través de FTP, a nuestro servidor web con el nombre que queramos, por ejemplo, optimizar.php.
Podemos ejecutar dicho script manualmente desde el navegador web siempre que queramos, o crear un cronjob para la ejecución automática. En este segundo caso tendremos que darle al script los permisos adecuados: 755 o 777.
Este es el script:
<?php echo '<pre>' . "\n\n"; set_time_limit( 100 ); $time = microtime(); $time = explode(' ', $time); $time = $time[1] + $time[0]; $start = $time; //Connection variables : $h = 'servidor'; $u = 'nombre_usuario'; $p = 'contraseña'; $dummy_db = 'mysql'; $db_link = mysql_connect($h,$u,$p); $res = mysql_db_query($dummy_db, 'SHOW DATABASES', $db_link) or die('No se pudo conectar: ' . mysql_error()); echo 'Encontradas '. mysql_num_rows( $res ) . ' bases de datos' . "\n"; $dbs = array(); while ( $rec = mysql_fetch_array($res) ) { $dbs [] = $rec [0]; } foreach ( $dbs as $db_name ) { echo "Base de datos : $db_name \n\n"; $res = mysql_db_query($dummy_db, "SHOW TABLE STATUS FROM `" . $db_name . "`", $db_link) or die('Llamada : ' . mysql_error()); $to_optimize = array(); while ( $rec = mysql_fetch_array($res) ) { if ( $rec['Data_free'] > 0 ) { $to_optimize [] = $rec['Name']; echo $rec['Name'] . ' necesita optimización' . "\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 'Analizado en ' . $total_time . ' segundos' . "\n\n"; ?>
Antes de subirlo al servidor web con un cliente FTP, no te olvides de cambiar servidor, nombre_usuario y contraseña por los que corresponden a tu servidor MySQL.
Conclusión
Lo normal, si el script tiene la forma que indicamos, no debe haber problemas. Pero hay que tener cuidado, no vayamos a efectuar el proceso y cometer un fallo. Lo normal es que antes de llevar a cabo la acción es conveniente efectuar una copia de la base de datos con el fin de corregir los posibles fallos.