¿Cómo Optimizar un servidor MySQL?

Dificultad: Fácil
<b>Tiempo de Lectura:</b> 2 minutos

MySQL es un sistema de gestión de bases de datos relacional, multihilo y multiusuario.
Es muy utilizado en aplicaciones web, como Drupal, WordPress, phpBB, Joomla! y muchos más en servidores GNU/Linux (y también Windows y otras plataformas)

Webs de la taya de Wikipedia, Google, Facebook, Twitter, Flickr y YouTube también hacen uso de MySQL.

Para optimizar un servidor con mysql debemos recurrir a la edición del archivo /etc/my.cnf

En él podemos incluir las variables y valores necesarios acordes a nuestras necesidades.

Hay dos variables muy importantes a tener en cuenta, éstas son key_buffer_size (es la memoria que se utiliza para respaldar los índices MyISAM) y table_cache (indica la cantidad de tablas que se pueden abrir en forma simultánea)

Otras variables primordiales que deben atenderse son:

read_buffer_size (indica la memoria utilizada para respaldar los datos de los full table scan o sequential scan de las tablas)

sort_buffer (indica la memoria que será utilizada para respaldar los datos de las tablas que serán llamadas a ordenarse mediante un ORDER BY)

Como ven, estas variables tienen en común la gestión de memoria. Mientras más memoria tengamos disponible en el servidor y más memoria dediquemos a estas variables más rápido funcionará nuestro server mysql.

Es fundamental que las bases de datos estén bien diseñadas, utilizando índices (sobre todo en las columnas vinculadas a las búsquedas) pero sin abusar de ellos, ya que esto influye negativamente a la hora de actualizar las tablas. Si una tabla no tiene índice, TODOS los registros necesitan ser revisados durante una búsqueda.

Muchas veces cuando se crea un usuario para una base de datos se le asignan todos los privilegios, lo cual también puede ser algo negativo ya que dichos privilegios se deben verificar en cada acceso a tablas y columnas, por lo tanto solo deben asignarse los privilegios necesarios y no todos para evitar ralentizar el proceso.

La correcta utilización de los campos es fundamental. Por ejemplo el hecho de usar campos con longitud predeterminada o fija permite mejorar el acceso a las columnas. El uso de campos más pequeños permite asignar más memoria a las columnas.

OPTIMIZE TABLE es como desfragmentar el disco duro, nos permite hacer una desfragmentación de las tablas y es fundamental utilizarlo.

Controlar las consultas lentas es algo fundamental, mysql nos permite verificar el tiempo de ejecución de las consultas y las que se quedan en estado de SLEEP. Controlar este comportamiento es fundamental. Podemos activar el Slow query log desde el my.cnf para loguear las consultas lentas. También podemos usar el programa MYTOP para ver en tiempo real las consultas lentas.

Algo que puede aparecer con frecuencia en el mysql.log es este mensaje: “table marked as crashed and should be repaired” indicando además la tabla que está rota. Podemos hacer uso de la conocida herramienta gráfica de gestión de bases de datos PHPMYADMIN para reparar las tablas, además de optimizarlas y mucho más, o bien podemos reparar las tablas desde la consola.

Un tip rápido para reparar todas las bases de datos desde la consola:

mysqlcheck -u root -p --auto-repair --optimize --all-databases

Como ven, para tener un server mysql eficaz no es suficiente con una correcta configuración desde el servidor sino que es imprescindible que las bases de datos estén correctamente diseñadas. Generalmente y sobre todo en servidores compartidos, éste último punto será el responsable de la mayoría de los problemas, ya que serán frecuentes las sobrecargas por consultas lentas y bases de datos mal diseñadas, creadas sin tener en cuenta un diseño específico y optimizado según el caso.


¿Te resultó útil el artículo? Compártelo con tus colegas: