Optimizando MySQL 5.6 innodb_buffer_pool_size

Uno de los parámetros de configuración que hablé en el artículo anterior era innodb_buffer_pool_size, como su nombre indica es el buffer de almacenamiento de innodb, mientras mayor sea este valor menores serán las lecturas y escrituras en el disco duro y por consiguiente mayor será la velocidad de las operaciones. Lo único malo es que este buffer va directamente a la memoria RAM con lo cual si es poca tenemos que ajustarnos.

El valor por defecto en MySQL 5.6.10 son 100 MB y lo que se recomienda en un servidor dedicado es el 80 % de la memoria RAM, pero bueno siendo MySQL muy pocos utilizamos un servidor dedicado para ello casi siempre compartimos con apache y otros servicios con lo cual lo mejor es ir probando configuraciones hasta dar con la ideal, yo tengo 3 GB de RAM y por ahora he puesto un buffer de 700 MB y no he notado carga en el servidor pero si una mejoría increíble en el acceso a disco.

Os dejo las gráficas.

Veamos el comportamiento del buffer innodb, nótese el cambio drástico en la gráfica:

mysql_innodb_bpool-week

Ahora veamos el uso de la memoria RAM para ver si ha penalizado el rendimiento del servidor:

memory-week

Como se puede observar no hay una penalización en el rendimiento con estos valores pese a ser un servidor no dedicado.

Veamos como decrece la actividad del buffer:

mysql_innodb_bpool_act-week

Y ahora veamos la lectura escritura en el disco duro:

mysql_innodb_io-week

Estas gráficas están sacadas del servicio de monitorización munin instalado en ese servidor.

Ahora veamos como configurar los logs de innodb también para que tengan una configuración adecuada. Según el manual de MySQL el tamaño ideal para innodb_log_buffer_size es el 25 % del buffer (recordar que todos estos valores van contra la RAM y no se solapan sino que se unen por tanto el consumo de RAM sería innodb_buffer_pool_size + innodb_log_buffer_size). Yo no cumplo estos valores (para 700 MB de innodb_buffer_pool_size deberían ser 175 MB en innodb_log_buffer_size y yo solo he asignado 20 MB) pero bueno esto también es ir ajustando según la necesidad.

Lo que si hago es limitar el tamaño de los logs con innodb_log_file_size, el valor que le asignemos en my.cnf será el valor que siempre tendrán estos logs desde el reinicio del servicio mysql, este valor lo debemos ajustar al tamaño de nuestro disco duro, en mi caso son 100 MB cada uno (ib_logfile0 e ib_logfile1).

Probad vuestra configuración, eso siempre será la mejor opción, cada software es diferente, cada entorno es distinto y sobre todo cada configuración de hardware es dispar.

Comentarios