Cuando se confirma una transacción grande, ApsaraDB RDS for MySQL mantiene un bloqueo de escritura mientras vuelca los eventos del registro binario desde la caché de sesión hacia un archivo de registro binario. Si la caché del registro binario alcanza decenas de GB, este bloqueo detiene todas las solicitudes de escritura y puede agotar los recursos de E/S, lo que deja a la instancia sin respuesta.
La función binlog cache free flush elimina este cuello de botella al convertir los archivos temporales de la caché del registro binario directamente en archivos de registro binario durante la confirmación, en lugar de leer y reescribir cada evento bajo un bloqueo. Esto reduce el tiempo de confirmación de transacciones grandes, disminuye el consumo de E/S y mantiene la capacidad de respuesta de la instancia.
Requisitos previos
Antes de empezar, asegúrese de que:
Su instancia RDS ejecute MySQL 8.0 o MySQL 5.7
La versión menor del motor sea 20240731 o posterior
Para comprobar la versión menor del motor, inicie sesión en la consola de ApsaraDB RDS y vaya a la página Basic Information. En la sección Configuration Information, compruebe si se muestra el botón Upgrade Kernel Version. Si aparece, haga clic en él para consultar y actualizar la versión menor del motor. Si no se muestra, la instancia ya cuenta con la versión menor más reciente. Para obtener más información, consulte Update the minor engine version.
Habilitar y configurar la función
Habilitar la función
Ejecute el siguiente comando para habilitar binlog cache free flush:
SET GLOBAL binlog_cache_free_flush = on;
El cambio surte efecto de inmediato. No es necesario reiniciar la instancia.
Comprobar que la función está activa
SHOW GLOBAL VARIABLES LIKE 'binlog_cache_free_flush';
Ajustar el umbral
El parámetro binlog_cache_free_flush_limit_size define el tamaño mínimo de datos del registro binario que desencadena la conversión. El valor predeterminado es 256 MB, por lo que solo las transacciones cuyos datos de registro binario superen este tamaño utilizan la ruta de vaciado libre.
Para aplicar la optimización a transacciones más pequeñas, reduzca el umbral:
SET GLOBAL binlog_cache_free_flush_limit_size = <size-in-bytes>;
Deshabilitar la función
SET GLOBAL binlog_cache_free_flush = off;
Parámetros
|
Parámetro |
Valor predeterminado |
Descripción |
|
|
|
Habilita o deshabilita la función. Variable global del sistema. Surte efecto inmediatamente sin necesidad de reiniciar la instancia. Valores válidos: |
|
|
|
Umbral que desencadena la conversión. Cuando los datos del registro binario de una transacción superan este valor, los archivos temporales en la caché del registro binario se convierten en archivos de registro binario durante la confirmación. Rango de valores: 20971520–18446744073709551615 bytes. |
Funcionamiento
Caché del registro binario
Cada sesión dispone de su propia caché de registro binario, compuesta por espacio en memoria (limitado por binlog_cache_size) y archivos temporales en disco. Cuando los eventos de una transacción exceden el límite de memoria, se almacenan en un archivo temporal.
Al confirmar la transacción, el motor lee cada evento de la caché, actualiza la posición final y la suma de comprobación, y los escribe en el archivo de registro binario bajo un bloqueo de escritura. Este bloqueo garantiza que los eventos se escriban sin interrupciones, pero bloquea otras transacciones durante todo el proceso de vaciado.
Impacto de las escrituras de registro binario en transacciones grandes
Cuando la caché del registro binario de una transacción alcanza decenas de GB, su vaciado durante la confirmación provoca dos problemas:
Solicitudes de escritura bloqueadas: El bloqueo de escritura se mantiene durante todo el vaciado, lo que impide que otras transacciones escriban.
Agotamiento de E/S: La escritura secuencial de gran tamaño consume recursos de E/S y puede dejar la instancia sin respuesta.
Cómo resuelve esto binlog cache free flush
AliSQL optimiza el mecanismo de caché del registro binario para que los archivos temporales en la caché puedan convertirse directamente en archivos de registro binario. Dos cambios hacen esto posible:
Espacio de encabezado reservado: Al escribir eventos en el archivo temporal, se reserva espacio al inicio para los encabezados del archivo de registro binario. Cuando el archivo temporal se convierte en un archivo de registro binario, ese espacio reservado se llena con los encabezados necesarios, sin requerir una escritura adicional.
Posiciones finales precalculadas: Cada evento calcula su posición final según el tamaño del espacio reservado, por lo que las posiciones ya son correctas después de la conversión.
Contenido del archivo de registro binario convertido
Cuando se confirma una transacción grande, el espacio reservado al inicio del archivo temporal se llena con los siguientes datos antes de la conversión:
|
Datos |
Descripción |
|
Encabezado de archivo |
El número mágico de 4 bytes |
|
Eventos de encabezado |
El evento de descripción de formato y el evento de identificador de transacción global (GTID) anterior |
|
Evento vacío |
Un evento de tipo ignorable que llena cualquier espacio reservado restante |
|
Evento GTID |
El GTID de la transacción que se confirma, generado en el momento de la confirmación |
El resto del archivo conserva los eventos originales de la transacción: eventos de consulta, eventos de asignación de tablas, eventos basados en filas y eventos XID.
Diferencias respecto a un archivo de registro binario estándar
Los archivos de registro binario convertidos difieren de los archivos estándar en dos aspectos:
Contienen un evento vacío (tipo ignorable) que ocupa el espacio reservado restante.
La suma de comprobación está deshabilitada de forma predeterminada.
La función binlog cache free flush no modifica el formato del archivo de registro binario. La replicación y las herramientas de terceros no se ven afectadas.
Efectos de la optimización

La figura compara los tiempos de confirmación de transacciones grandes en instancias que utilizan Enterprise SSDs (ESSDs) de nivel de rendimiento 1 (PL1) y Premium Local SSDs, con la función habilitada y deshabilitada. Habilitar binlog cache free flush reduce el tiempo de confirmación y resuelve tanto el agotamiento de recursos de E/S como la larga duración del bloqueo de escritura.