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";?>