MySQL/Optimización/Rendimiento de la BD

El rendimiento de una base de datos depende de numerosos factores y se requiere una gestión adecuada para optimizarla. Por ejemplo, algunos factores no relacionados directamente con MySQL son el propio Hardware del equipo, el sistema operativo y el tipo de sistema de ficheros utilizados. A continuación se procede a hablar de parámetros relacionados con MySQL:

  • Tiempo de latencia: Es el tiempo que requieren los discos para realizar las operaciones de lectura y escritura de datos. Depende del tiempo necesario para mover las cabezas del lector del disco y la velocidad de rotación del disco. La E/S a disco suele ser la parte más lenta de cualquier sistema.

Se puede aliviar teniendo una buena RAM y optimizando la configuración del caché de MySQL.

  • Problemas de disco: Al aumentar el tamaño de nuestra base de datos la cache pierde eficacia y se requerirán varios accesos (que se harán más o menos al azar) para leer y escribir registros. Se puede minimizar este problema utilizando SGBD que tengan un tiempo de lectura y escritura bajo o usando enlaces simbólicos de manera que se puedan tener diferentes bases de datos en diferentes discos.
  • Confiabilidad: La confiabilidad es una medida de la integridad de nuestra base de datos, y se puede mejorar usando sistemas RAID, e iremos aumentando al sistema RAID a medida de que los datos se vuelvan más críticos. Pero el problema que esto conlleva es que para aplicaciones de muchas escrituras el aumentar el sistema RAID puede provocar una reducción del rendimiento.


InnoDB es el tipo de motor por defecto en MySQL y es adecuado para una base de datos confiable con un elevado numero de concurrencia de transacciones. Se puede configurar usando la siguiente sintaxis:

innodb_data_file_path=datafile_specl[;datafile_spec2) ... file_name:file size [ : autoextend[:max :max_file_size]]

Siendo datafile_specx cada una de las rutas al espacio de almacenamiento.


A tener en cuenta para aumentar el rendimiento

editar
* Para la optimización de las bases de datos resulta ventajoso el usar una clave primaria de tamaño pequeño, ya que sera copiada en cada indice secundario. Si la clave principal es larga podremos utilizar un campo autonumérico para aumentar el rendimiento. 
* Es preferible utilizar tipos variables como VARCHAR a CHAR, ya que ocupara menos espacio. 
* En servidores con muchas transacciones puede resultar ventajoso poner AUTOCOMMIT en off e incluir todas nuestras transacciones entre sentencias STAR TRANSACTION y COMMIT. 
* Para la aceleración de la importación de grandes cantidades de datos se puede desactivar la comprobación de claves secundarias (UNIQUE) y ajenas (FOREIGN KEY) cambiando las variables unique_checks y foreign_key_checks a 0. Igual que el caso anterior también podemos poner auto_commit a 0 y introducir un COMMIT manualmente al final de la importación.
* Es preferible definir las claves primarias en la creación de las tablas InnoDB: debido a su forma de almacenamiento el modificarlas a posteriori provoca reducción del rendimiento. 
* innodb_buffer_pool_size es una variable que podemos aumentar para evitar accesos a disco. 
* MyiSAM es un tipo de motor más adecuado para aplicaciones con poca concurrencia y muchos accesos.