Disminuir los accesos a Disco en MySQL con ramdisk (tmpfs) con Linux

El uso de particiones montadas directamente en RAM trae consigo innumerables beneficios a la hora de disminuir el acceso a disco (no solo lo disminuye, ¡lo hace desaparecer!).

El uso de ramdisk (utilizando particiones del tipo tmpfs) en Linux es uno de esos tips que ningún Administrador de Sistemas debería desconocer.

Hoy les mostraré lo fácil que es crear una partición en RAM (tmpfs) y utilizarla en MySQL, haciendo desaparecer los accesos a nuestro Disco.

Crea un directorio donde se montará la partición tmpfs

Como primer paso, crearemos un directorio donde montaremos la partición tmpfs, la cual se utilizará como una partición tradicional, con el plus de escribir directamente en RAM, aumentando al máximo el rendimiento de lo que allí se escriba.

#mkdir /tmp/tmpmysql

Detener demonio mysql y declarar partición creada en la configuración de MySQL

Antes de continuar, debemos detener el demonio mysql. Luego, editaremos el archivo de configuración de MySQL y declararemos el directorio que se utilizará como temporal para nuestro motor de Base de Datos.

#vim /etc/mysql/my.cnf

En la línea...

tmpdir       = /tmp/tmpmysql

...agregaremos nuestro nuevo directorio tmpmysql (agregado en rojo).

Guardamos los cambios y salimos del my.cnf.

Conocer los id de nuestro usuario mysql

Para conocer el ID de nuestro usuario mysql, ejecutaremos el siempre indispensable comando id:

id mysql

Lo que nos devolverá:

uid=105(mysql) gid=112(mysql) groups=112(mysql)

Recordemos los datos uid y gid, pues los utilizaremos en el próximo paso.

Montar partición ramdisk como tmpfs sólo con privilegios para mysql

Editaremos el file /etc/fstab y declararemos la partición, tipo, punto de montaje y permisos específicos (entre tantas otras opciones que se podrían declarar -ver man mount-).

#vim /etc/fstab

Agregaremos la siguiente línea (siempre teniendo en cuenta que mis ID de usuario mysql pueden siempre diferir de los tuyos):

tmpfs /tmp/tmpmysql tmpfs rw,uid=105,gid=112,size=128m 0 0

De izquierda a derecha y en rojo: File System, ubicación del punto de montaje, tipo de File System, y las opciones (nótese los uid y gid) junto con el tamaño asignado a dicha partición. Guardaremos los cambios y saldremos.

Es importante tener en cuenta que el tamaño que le asignemos a dicha partición tmpfs será "decrementado" directamente de nuestra RAM.

Antes de terminar, montaremos las particiones declaradas en nuestro /etc/fstab mediante el comando mount -a.

Por último, iniciaremos nuevamente el demonio mysql y si todo marchó bien, MySQL utilizará para sus transacciones y otras acciones su nuevo temporal, ahora una partición en RAM que hará desaparecer los accesos a nuestro Disco Duro, simplemente "traficando" datos entre la RAM y la CPU.

Para corroborar que todo marche bien, puedes ejecutar df -h para observar la partición tmpfs montada en el directorio creado.

TIPS
  • Mediante el comando watch podremos ver de forma recursiva cómo se escriben datos en dicho directorio (watch -n 0.5 ls -lh /tmp/tmpmysql). 
  • Si usas servicios como munin, puedes hacer "un antes y un después" de utilizar ramdisk (tmpfs) para notar como descansarán las I/O a Disco.
ACTUALIZACIÓN: si utilizas Ubuntu 16.04 LTS, el archivo por defecto de configuración de MySQL donde puedes realizar el cambio de la carpeta temporal por defecto está ubicado en /etc/mysql/mysql.conf.d/mysqld.cnf.
Publicar un comentario

Entradas populares de este blog

Botones capacitivos no vibran o encienden en Samsung S6

PARTE I: Instalar OCS Inventory NG (Server) en Ubuntu Linux 14.04 LTS

Enviar mensaje masivo a PCs con Windows en un Dominio