Optimizar el rendimiento de MySQL o MariaDB con MySQLTuner

Published:

Estoy jugando bastante con mi Linux, especialmente tratando de investigar como mejorar la performance de mi base de datos para los distintos servidores que estuvimos viendo en el blog, así que hoy voy a mostrar como instalar MYSQLTuner para tratar de identificar los puntos que podemos mejorar de nuestro motor.

MySQLTuner es un script escrito en Perl que analiza el rendimiento de MySQL y, en función de las estadísticas que recopila, proporciona recomendaciones sobre las variables que se pueden ajustar para aumentar el rendimiento y mejorar la performance.

Para descargar el script MySQLTuner de la siguiente manera desde su web oficial:

wget http://mysqltuner.com/mysqltuner.pl

Para ejecutarlo, debemos darle permisos de ejecución:

chmod +x mysqltuner.pl  

Después, podemos ya podemos ejecutarlo. Necesitas tu contraseña de root de MySQL para ello:

./mysqltuner.pl

Como vemos al ejecutar el comando nos propone una serie de mejoras, ahora veamos algunas opciones, por el momento estoy investigando, así que si alguien nos da una mano sería genial. Esto no modifica nada solo hace un análisis.

Tuning MySQL

Cuando se modifica la configuración de MySQL, debemos estar alerta a los cambios y cómo afectan a la base de datos. Incluso cuando se siguen las instrucciones de programas de MySQLTuner, es mejor comprender el proceso que iremos tratando de investigar a fondo en futuras publicaciones.

El archivo de configuración de MySQL almacena, depende de la versión que tengamos, pero por lo general esta en: /etc/mysql/my.cnf.

Nota

Antes de actualizar la configuración de MySQL, es recomendable crear una copia de seguridad del archivo my.cnf:

cp /etc/mysql/my.cnf ~/my.cnf.backup

Las mejores prácticas sugieren que realicemos los cambios paso a paso, uno a la vez, y luego ir viendo el comportamiento del servidor después de cada cambio. Se debe reiniciar MySQL después de cada cambio:

Para distribuciones utilizando systemd:

systemctl restart mysqld

Para distribuciones con diferentes sistemas init:

service mysql restart

Análisis de algunos parámetros

key_buffer

El cambio de key_buffer asigna más memoria a MySQL, lo que puede acelerar sustancialmente sus bases de datos, asumiendo que tiene la memoria libre. En general el tamaño no debe ocupar más del 25 por ciento de la memoria del sistema cuando se utiliza el motor de tabla MyISAM, y hasta el 70 por ciento para InnoDB. Si el valor se establece demasiado alto, se desperdician recursos.

De acuerdo con la documentación de MySQL, para servidores con 256MB (o más) de RAM con muchas tablas, se recomienda una configuración de 64M. Los servidores con 128MB de RAM y menos tablas pueden configurarse a 16M, el valor predeterminado. Los sitios web con menos recursos y tablas pueden tener este valor establecido más bajo.

max_allowed_packet

Este parámetro permite establecer el tamaño máximo de un paquete enviables. Un paquete es un solo estado de SQL, una sola fila que se envía a un cliente o un registro que se envía de un maestro a un esclavo. Si estamos seguros que nuestro servidor MySQL procesará paquetes grandes, es mejor aumentar esto al tamaño de su paquete más grande. Si este valor fuera demasiado pequeño, se recibirá un error en el registro de errores.

thread_stack

Este valor contiene el tamaño de pila para cada hilo. MySQL considera que el valor predeterminado de la variable es suficiente para el uso normal; sin embargo, si se registra un error relacionado con el, se puede aumentar.

thread_cache_size

Si thread_cache_size está «desactivado» (establecido en 0), entonces cualquier nueva conexión que se realice necesita un nuevo hilo creado para ello. Cuando las conexiones se desenganchan, el hilo se destruye. De lo contrario, este valor establece el número de subprocesos no utilizados para almacenar en un caché hasta que necesiten ser utilizados para una conexión. En general, esta configuración tiene poco efecto en el rendimiento, a menos que esté recibiendo cientos de conexiones por minuto, momento en el que este valor debería aumentarse para que la mayoría de las conexiones se puedan realizar en subprocesos almacenados en caché.

max_connections

Este parámetro establece la cantidad máxima de conexiones concurrentes . Es mejor considerar la cantidad máxima de conexiones que ha tenido en el pasado antes de establecer este número, para que tenga un búfer entre ese número superior y el valor. Tenga en cuenta que esto no indica la cantidad máxima de usuarios en su sitio web al mismo tiempo; más bien muestra la cantidad máxima de usuarios que realizan solicitudes simultáneamente.

table_cache

Este valor debe mantenerse más alto que su valor open_tables. Para determinar este valor usamos el comando, dentro de MYSQL:

SHOW STATUS LIKE 'open%';
- Advertisement -
Jorge
Jorgehttps://nksistemas.com
Soy Jorge, Sr Sysadmin Linux/DevOps/SRE y creador de NKSistemas.com Trabajo con plataformas: Linux, Windows, AWS, GCP, VMware, Helm, kubernetes, Docker, etc.

Related articles