Prácticas recomendadas para discos persistentes de 16 KB y MySQL

En este documento, se describe cómo usar un disco persistente de tamaño de bloque físico de 16 KB para mejorar el rendimiento de una base de datos MySQL.

Las cargas de trabajo de MySQL con alto volumen de escritura se suelen beneficiar de inhabilitar el búfer InnoDB doublewrite. El InnoDB de MySQL realiza una escritura doble durante el proceso de limpieza de páginas desfasadas para poder recuperar posibles páginas rotas.

Sin embargo, si existe una ruta de escritura atómica de 16 KB de extremo a extremo que garantice que una página de datos de 16 KB no se asigne de forma parcial al disco o a la escritura incompleta, entonces no hay necesidad de realizar una escritura doble. Cuando se inhabilita la escritura doble, se duplica la capacidad de limpieza de páginas desfasadas de la base de datos. Esto reduce la frecuencia con que la base de datos entra en un estado de limpieza sincronizada y genera un rendimiento más estable, y, posiblemente, mayor.

Antes de comenzar

Crea una ruta de escritura atómica de 16 KB desde la base de datos hasta el dispositivo de bloques

Puedes aprovechar un disco persistente de 16 KB para crear una ruta de escritura atómica de 16 KB de extremo a extremo desde la base de datos hasta el dispositivo de bloques. Esto te permitirá inhabilitar de forma segura la función de doble escritura en MySQL/InnoDB y lograr un rendimiento mayor y más estable durante una carga con alto volumen de escritura.

Crea y adjunta un disco persistente a través de Google Cloud Console, la herramienta de gcloud o la API.

  1. Crea un disco persistente de tamaño de bloque de 16 KB y adjúntalo a tu VM. El disco persistente de 16 KB proporcionará una atomicidad de escritura de 16 KB a nivel de bloque físico.

    Se recomienda configurar la instancia de MySQL para que almacene archivos de datos solamente en el disco persistente de 16 KB, aunque esto es opcional. Almacena los archivos de registro, en especial el registro de rehacer y los registros binarios, en un disco persistente de 4 KB que se encuentre adjunto a la misma VM. Esto garantiza que las escrituras de archivos de registro sigan teniendo un rendimiento alto, ya que las escrituras de registro pequeñas en un disco persistente de 16 KB podrían activar varias lecturas, modificaciones y escrituras, que son más lentas.

  2. Formatea el disco de 16 KB mediante el sistema de archivos ext4 con la opción BigAlloc y configura el tamaño del clúster en 16 KB. A continuación, verás un ejemplo del comando mkfs con la opción BigAlloc especificada:

    mkfs.ext4 -O bigalloc -C 16384 [...other options…]
    

    El uso de BigAlloc con 16 KB como tamaño del clúster garantiza que el sistema de archivos asigne archivos que se ajusten al límite de 16 KB en el disco.

  3. Cuando crees la instancia de VM, elige una imagen de SO de las familias de imágenes de Container-Optimized OS de Google en el proyecto cos-cloud.

    Usa el comando gcloud para ver una lista de todas las imágenes cos disponibles:

    gcloud compute images list --project cos-cloud --no-standard-images
    

    Selecciona la versión 67 o superior. Para obtener mejores resultados, considera elegir una imagen de la familia cos-stable.

    La elección de una imagen cos garantiza que las escrituras no se dividan de forma inadecuada en un límite de 16 KB por capas entre la capa del dispositivo de bloques físico y del sistema de archivos. El proceso de calificación de la imagen cos cuenta con pruebas integradas para garantizar este resultado.

  4. Asegúrate de que max_segments y max_sectors_kb estén configurados de forma adecuada en el SO:

    max_segments >= max_sectors_kb/4
    

    Estas dos variables ya están configuradas en todas las VM de Compute Engine; si no tienes una secuencia de comandos que modifique estas dos variables después de la creación de la VM, no es necesario que realices ninguna acción en este paso.

    Puedes consultar estas dos constantes del SO en la siguiente ruta:

    /sys/block/sd<drive letter>/queue/
    
  5. Configura noop o none como el programador de E/S del disco persistente de 16 KB.

    echo "none" > /sys/block/sd<drive_letter>/queue/scheduler
    
  6. Inhabilita las solicitudes de E/S que se combinan en el kernel del disco persistente de 16 KB.

    echo 2 > /sys/block/sd<drive_letter>/queue/nomerges
    
  7. Configura InnoDB para que use O_DIRECT. Configura (o agrega) O_DIRECT a la configuración de la base de datos innodb_flush_method.

Ahora puedes desactivar de forma segura la opción innodb_doublewrite.

Este método no es el único enfoque que puedes tomar para garantizar escrituras atómicas de 16 KB de extremo a extremo con un dispositivo de bloques de 16 KB. Por ejemplo, si configuras la base de datos para que use el dispositivo de bloques directamente como un dispositivo sin formato sin usar un sistema de archivos, puedes omitir los pasos anteriores en los que se describe la configuración del sistema de archivos.

Próximos pasos