Los costos de un servidor dedicado no son baratos, tener el servidor de bases de datos mal configurado puede hacer que tengamos que contratar un servidor más potente, por eso para mantener los costos operativos bajos les presento 3 scripts para optimizar el servidor de bases de datos MySQL.
MySQL Tuner Performance Script
MySQL Tuner Performance es un script que podemos correr en el servidor para optimizar y configurar correctamente a MySQL. Principalmente con éste script podemos:
- Analizar el log de las consultas que se demoran mucho tiempo.
- Ver si está bien configurado las conexiones máximas (Max Connections), Worker Thread, Key Buffer, Query Cache, Sort Buffer, Joins, Temp Tables, Table Cache, Table Locking, Table Scans y Innodb Statu.
Para que los datos sean exactos, hay que esperar que recabe información por lo menos 48 horas, cosa que según sea el problema puede resultar algo complicado si es que se trata de un servidor saturado que se cae con frecuencia.
Descargar: www.day32.com/MySQL
MySQLTuner
MySQLTurnes es un script que nos asiste con la configuración de MySQL ya que nos proporciona recomendaciones para aumentar las estabilidad y el rendimiento del servidor.
Para que los datos sean exactos, hay que esperar a que recopile información por lo menos 24 horas, algo que como ya mencioné, puede resultar problemático en servidores muy mal configurados o fatigados por exceso de trabajo.
Igualmente no se aconseja tomar al pie de la letra las recomendaciones que este ofrece, sino utilizar el sentido común y los conocimientos propios para ver que es lo más lógico de cambiar en la configuración.
Es un script en Perl por lo que si no estas corriendo nada en dicho lenguaje, posiblemente esté deshabilitado en tu servidor, normalmente habilitarlo es una tarea sencilla que se puede realizar desde un panel de control como Plesk.
Descargar: wiki.mysqltuner.com/MySQLTuner
Optimizar automáticamente la base de datos
Para los sitios que están montados bajo la plataforma Worpdress existen excelentes extensiones para optimizar la base de datos y para los que no también está PHPMyAdmin, desde el cual siempre se pueden analizar, corregir y reparar las bases de datos.
Para automatizar el proceso de optimización, se puede bajar un script PHP y configurarlo por medio de Cron para que corra automáticamente.
Para descargar el script y ver los pasos detallados de la implementación visita: www.guatewireless.org/optimizar-mysql-para-wordpress,
Comentarios finales
Personalmente he usado y uso las tres soluciones, me parecen los tres muy buenos, pero vuelvo a remarcar lo que mencioné antes, en los casos de los dos primeros scripts, no tomar las recomendaciones al pie de la letra, usar siempre el criterio y los conocimientos propios a la hora de hacer los cambios.
Para el script PHP, revisar los permisos de conexión desde PHPMyAdmin si es que arroja error de conexión 1045.
<?php echo '<pre>' . "\n\n"; 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 \n\n"; $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' . "\n\n"; ?>