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 MySQL con alto volumen de escritura generalmente se benefician de inhabilitar el búfer InnoDB doublewrite. 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 hacia 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 escritura doble en MySQL/InnoDB y lograr un rendimiento mayor y más estable durante una carga con alto volumen de escritura.

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

  1. Crea un disco persistente de tamaño de bloque físico de 16 KB y adjúntalo a tu VM. El disco persistente de 16 KB proporcionará una atomicidad de escritura de 16 KB en el 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 esté conectado 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 usando 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 la familia de imágenes de Google Container-Optimized OS en el proyecto cos-cloud.

    Usa el comando de 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, puedes elegir una imagen de la familia cos-stable.

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

  4. Asegúrate de que max_segments y max_sectors_kb estén configurados de manera correcta 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 para el 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 usar O_DIRECT. Configura (o agrega) O_DIRECT a la configuración innodb_flush_method de la base de datos.

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

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.

Qué sigue

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Compute Engine