En este post veremos como mejorar el rendimiento de los servidores de bases de datos MariaDB/Mysql, modificando el formato de archivos de las tablas de “Antelope” a “barracuda”. El formato “Antelope” es obsoleto en las últimas versiones de MariaDB/Mysql.
Este artículo asume que posees los conocimientos mínimos de Linux, sabes cómo usar la terminal, y lo más importante, conoces tu servidor. La configuración es simple y se asume que estás ejecutando la terminal con la cuenta de root, si no es así, deberás adicionar ‘sudo’ a los comandos para obtener los privilegios de root.
Habilitar MySQL soporte unicode completo
UTF-8
Si tenemos sistemas que los venimos manteniendo desde versiones anteriores de MariaDB/Mysql , tendremos el problema de que por defecto MySQL usa una codificación de tres bytes por lo que los valores en el rango de cuatro bytes no pueden almacenarse. Cualquier registro que contenga un caracter de cuatro bytes no se guardará.
MySQL soporta UTF-8 de cuatro bytes completamente, pero requiere que se configuren ciertos ajustes de la base de datos.
Formato del archivo
Para permitir índices grandes en columnas debe ajustarse el formato del archivo a «Barracuda». Esto permite que el formato de fila se configure a «Compressed» o «Dynamic».
El formato de fila Dynamic provee beneficios de rendimiento principalmente para las columnas BLOB y TEXT(o cualquier campo dinámico).
Configuración
Para realizar estos cambios realizar lo siguiente:
Mysql
MySQL 8.0 o posterior:
[mysqld] innodb_file_per_table=1 innodb_large_prefix=true
MySQL versiones anteriores a 8.0:
[mysqld] innodb_large_prefix=true innodb_file_format=barracuda innodb_file_per_table=1
Reiniciar el servidor Mysql.
Cambiar la configuración de caracteres de la base de datos:
ALTER DATABASE nombre_base_de_datos CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Cambiar mysql.utf8mb4 a true en el archivo config.php.
MariaDB
MariaDB 10.3 o posterior
Cambiar la configuración de InnoDB en el servidor:
nano /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld] innodb_file_per_table=1
MariaDB 10.2 o anteriores
Cambiar la configuración de InnoDB en el servidor:
[mysqld] innodb_large_prefix=true innodb_file_format=barracuda innodb_file_per_table=1
Reiniciar el servidor MariaDB.
Verificar si el formato de archivo de las tablas es Barracuda:
MariaDB> SELECT NAME, SPACE, ROW_FORMAT FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME like "nombre_base_de_datos%";
Si el formato es “Barracuda” para todas las tablas, no hay nada que hacer. Sin embargo, si el formato de alguna o todas las tablas de “Antelope” se necesita migrar manualmente cada tabla. Se pueden generar las sentencias SQL ejecutando lo siguiente:
MariaDB> USE INFORMATION_SCHEMA; MariaDB> SELECT CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` ROW_FORMAT=DYNAMIC;") AS MySQLCMD FROM TABLES WHERE TABLE_SCHEMA = "nombre_base_de_datos";
Después será necesario ejecutar todos los comando generados en el servidor MariaDB/Mysql.
MariaDB> ALTER TABLE `nombre_base_de_datos`.`nombre_tabla` ROW_FORMAT=DYNAMIC;