15 consejos útiles de optimización y ajuste del rendimiento de MySQL/MariaDB


MySQL es un potente sistema de gestión de bases de datos relacionales de código abierto o, en resumen, RDBMS. Fue lanzado en 1995 (20 años). Utiliza el lenguaje de consulta estructurado, que es probablemente la opción más popular para administrar contenido dentro de una base de datos. La última versión de MySQL es 5.6.25 y se lanzó el 29 de mayo de 2015.

Un hecho interesante sobre MySQL es el hecho de que el nombre proviene de My, la hija de Michael Widenius (el creador de MySQL). Aunque hay muchos datos interesantes sobre MySQL, este artículo está destinado a mostrarle algunas prácticas útiles para ayudarlo a administrar su servidor MySQL.

En abril de 2009, Oracle compró el proyecto MySQL. Como resultado, se creó una bifurcación de la comunidad MySQL llamada MariaDB. La razón principal para crear la bifurcación fue mantener el proyecto libre bajo la Licencia Pública General.

Hoy en día, MySQL y MariaDB son uno de los RDBMS más (si no el más) utilizados para aplicaciones web como WordPress, Joomla, Magento y otros.

Este artículo le mostrará algunos consejos básicos pero útiles sobre cómo optimizar el ajuste fino del rendimiento de MySQL/MariaDB. Tenga en cuenta que este artículo asume que ya tiene MySQL o MariaDB instalado. Si todavía se está preguntando cómo instalarlos en su sistema, puede seguir nuestras extensas guías aquí:

  1. Instalación de LAMP en RHEL/CentOS 7
  2. Instalación de LAMP en Fedora 22
  3. Configuración de LAMP en Ubuntu 15.04
  4. Instalación de MariaDB en Debian 8
  5. Instale MariaDB en Gentoo Linux
  6. Instale MariaDB en Arch Linux

Importante: antes de empezar, no acepte estas sugerencias a ciegas. Cada configuración de MySQL es única y requiere una reflexión adicional antes de realizar cambios.

Cosas que necesitas saber:

  1. El archivo de configuración de MySQL/MariaDB se encuentra en /etc/my.cnf . Cada vez que modifique este archivo, deberá reiniciar el servicio MySQL para que los nuevos cambios surtan efecto.
  2. Para escribir este artículo, se utilizó como plantilla la versión 5.6 de MySQL.

1. Habilitar archivo por tabla InnoDB

Primero, es importante explicar que InnoDB es un motor de almacenamiento. MySQL y MariaDB usan InnoDB como motor de almacenamiento predeterminado. En el pasado, MySQL solía mantener tablas e índices de bases de datos en un espacio de tablas del sistema. Este enfoque fue diseñado para servidores cuyo único propósito es el procesamiento de bases de datos y su disco de almacenamiento no se utiliza para ningún otro propósito.

InnoDB proporciona un enfoque más flexible y la información de cada base de datos se guarda en un archivo de datos .ibd . Cada archivo .ibd representa un espacio de tabla propio. De esa manera, las operaciones de la base de datos como "TRUNCATE" se pueden completar más rápido y también puede recuperar el espacio no utilizado al soltar o truncar una tabla de base de datos.

Otro beneficio de esta configuración es el hecho de que puede mantener algunas de las tablas de la base de datos en un dispositivo de almacenamiento separado. Esto puede mejorar enormemente la carga de E/S en sus discos.

El innodb_file_per_table está habilitado de forma predeterminada en MySQL 5.6 y superior. Puede ver eso en el archivo /etc/my.cnf. La directiva se ve así:

innodb_file_per_table=1

2. Almacene los datos de la base de datos MySQL en una partición separada

Nota: esta configuración solo funciona con MySQL, pero no con MariaDB.

A veces, la lectura/escritura del sistema operativo puede ralentizar el rendimiento de su servidor MySQL, especialmente si se encuentra en el mismo disco duro. En su lugar, recomendaría usar un disco duro separado (preferiblemente SSD) para el servicio MySQL.

Para completar esto, deberá conectar la nueva unidad a su computadora/servidor. A los efectos de este artículo, asumiré que la unidad estará en/dev/sdb.

El siguiente paso es preparar la nueva unidad:

# fdisk /dev/sdb

Ahora presione "n" para crear una nueva partición. Luego presione “p” para hacer que la nueva partición sea primaria. Después de eso, configure el número de partición de 1 a 4. Después de eso, seleccionará el tamaño de la partición. Presione enter aquí. En el siguiente paso, deberá configurar el tamaño de la partición.

Si desea utilizar todo el disco, presione Intro una vez más. De lo contrario, puede establecer manualmente el tamaño de la nueva partición. Cuando esté listo, presione "w" para escribir los cambios. Ahora necesitaremos crear un sistema de archivos para nuestra nueva partición. Esto se puede hacer fácilmente con:

# mkfs.ext4 /dev/sdb1

Ahora montaremos nuestra nueva partición en una carpeta. He nombrado mi carpeta "ssd" y la he creado en el directorio raíz:

# mkdir /ssd/

Estamos listos para montar la nueva partición que acabamos de crear en la nueva carpeta:

# mount /dev/sdb1  /ssd/

Puede realizar el montaje al inicio agregando la siguiente línea en el archivo/etc/fstab.

/dev/sdb1 /ssd ext3 defaults 0 0

Ahora está listo para mover MySQL al nuevo disco. Primero detenga el servicio MySQL con:

# service mysqld stop

También le recomendaría que detenga Apache/nginx para evitar cualquier intento de escribir en las bases de datos:

# service httpd stop
# service nginx stop

Ahora copie todo el directorio MySQL en la nueva unidad:

# cp /var/lib/mysql /ssd/ -Rp

Esto puede llevar un tiempo dependiendo del sitio de sus bases de datos MySQL. Una vez que se complete este proceso, cambie el nombre del directorio MySQL:

# mv /var/lib/mysql /var/lib/mysql-backup

A continuación, crearemos un enlace simbólico.

# ln -s /ssd/mysql /var/lib/mysql

Ahora está listo para iniciar su servicio web y MySQL:

# service mysqld start
# service httpd start
# service nginx start

En este punto, se accederá a sus bases de datos MySQL desde la nueva unidad.