La función Buffer Pool Extension (BPE) para instancias RDS MySQL que utilizan discos de alto rendimiento mejora la eficiencia de E/S del disco y la capacidad de respuesta del sistema. Esta función extiende el buffer pool para acelerar el almacenamiento en caché, lo que incrementa el rendimiento general de lectura y escritura de su instancia RDS. Este tema describe el funcionamiento de BPE, sus casos de uso y las pruebas de rendimiento.
Contexto
La lectura de datos del disco a la memoria y la escritura de datos de la memoria al disco son operaciones comunes en bases de datos. En comparación con las operaciones en memoria, la E/S de disco es significativamente más lenta y consume más tiempo. Para cargas de trabajo con solicitudes de datos a gran escala o frecuentes, la E/S de disco puede convertirse en un cuello de botella importante para el rendimiento.
Para solucionar esto, ApsaraDB RDS for MySQL ofrece una nueva opción de almacenamiento: discos de alto rendimiento. Estos discos son compatibles con all ESSD features y utilizan una arquitectura de almacenamiento de tres niveles para gestionar distintos tipos de datos y caché. Los discos de alto rendimiento también introducen ráfagas de E/S y la función Buffer Pool Extension (BPE) para mejorar aún más el rendimiento de E/S de su instancia RDS.
Introducción
Descripción general
Un buffer pool es un área de memoria que almacena en caché datos provenientes de discos. Cuando la base de datos necesita leer o escribir un bloque de datos, primero verifica el buffer pool:
Si el bloque de datos se encuentra en el buffer pool, la base de datos lo lee o escribe directamente desde la memoria.
Si el bloque de datos no está en el buffer pool, la base de datos lo lee del disco o lo escribe en él y luego lo copia al buffer pool.
Este mecanismo de caché reduce eficazmente las operaciones de E/S de disco y mejora el rendimiento de E/S de la instancia. Sin embargo, el tamaño del buffer pool está limitado por la memoria del sistema. Si la memoria es insuficiente, el tamaño limitado del buffer pool puede afectar negativamente el rendimiento de E/S.
RDS MySQL introduce la función Buffer Pool Extension (BPE) para ampliar el tamaño efectivo del buffer pool. Al aprovechar el kernel del motor de RDS, BPE mejora el rendimiento general de lectura y escritura de RDS MySQL. Esto permite que su instancia ejecute más comandos de lectura y escritura en un período determinado, lo que aumenta la eficiencia de E/S del disco y la capacidad de respuesta del sistema, acelerando así el almacenamiento en caché.
Beneficios
La función BPE crea una estructura de almacenamiento de tres niveles que aprovecha los medios de almacenamiento subyacentes de Alibaba Cloud para mejorar el rendimiento de E/S de la instancia en diversos escenarios y requisitos de almacenamiento de datos:
-
Mejora del rendimiento de lectura/escritura y reducción del tiempo de ejecución de SQL
La extensión del buffer pool almacena en caché las operaciones de lectura, lo que aumenta significativamente la velocidad de acceso a las páginas de datos y reduce el tiempo de ejecución de consultas SQL.
La extensión del buffer pool reduce considerablemente la frecuencia de acceso a archivos de datos en el disco de alto rendimiento de la instancia, lo que disminuye el uso del ancho de banda del disco.
-
Mayor estabilidad de la instancia
El disco que aloja la extensión del buffer pool tiene menor latencia que un disco de alto rendimiento. Este diseño reduce significativamente el impacto de la variabilidad de E/S del disco de alto rendimiento en las operaciones de la base de datos, mejorando la estabilidad.
En el Centro de experiencia de soluciones de Buffer Pool Extension (BPE), puede crear un entorno RDS real y observar resultados de pruebas de estrés en tiempo real con BPE habilitado y deshabilitado. Esta función es gratuita. Para obtener más información, consulte Observación del rendimiento de aceleración de E/S de disco de alto rendimiento de RDS (BPE).
Rentabilidad
La función Buffer Pool Extension (BPE) es gratuita para las instancias RDS MySQL compatibles y no requiere cambios en su aplicación.
Puede mejorar significativamente el rendimiento de E/S de la instancia sin modificar sus costos ni su lógica de negocio. Por ejemplo, una instancia RDS MySQL en High-availability Edition que utiliza un tipo de instancia de uso general con 8 vCPU y 16 GB de memoria puede lograr un aumento sustancial en las QPS de lectura y escritura. Para obtener más detalles, consulte Performance test.
Funcionamiento
La función Buffer Pool Extension (BPE) para discos de alto rendimiento utiliza tecnología de extensión de buffer pool para mejorar el rendimiento de los ESSD sin costo adicional. Al separar los datos calientes y fríos, esta función extiende el buffer pool de InnoDB. Almacena en caché páginas de datos tibios en la extensión del buffer pool, lo que permite a InnoDB utilizar múltiples medios de almacenamiento de manera flexible y alcanzar mayores QPS.
Arquitectura
La siguiente figura muestra la arquitectura de despliegue de BPE.

La extensión del buffer pool utiliza discos de alta velocidad como capa de caché entre la memoria y el disco de alto rendimiento. Estos discos de alta velocidad ofrecen menor latencia de E/S y un rendimiento superior en comparación con los discos de alto rendimiento.
El disco de alta velocidad se utiliza únicamente para almacenamiento en caché.
El archivo de datos, el archivo binlog y el archivo redo se almacenan en el disco de alto rendimiento.
Al extender el buffer pool de InnoDB, el sistema puede almacenar en caché páginas de datos del buffer pool principal hacia la extensión del buffer pool, lo que permite a InnoDB utilizar flexiblemente múltiples medios de caché.
Implementación
Cuando habilita la función Buffer Pool Extension (BPE), el sistema almacena en caché las páginas de datos de su instancia en la extensión del buffer pool del disco de alta velocidad.
Todas las páginas de datos almacenadas en la extensión del buffer pool son páginas limpias, lo que significa que son consistentes con los datos del archivo de datos en el disco de alto rendimiento.
Al leer una página de datos, el sistema sigue estos pasos:
Un cliente inicia una solicitud para leer una página de datos.
-
El sistema busca la página de datos solicitada en el buffer pool en memoria.
Si se encuentra la página (acierto de caché), el sistema la devuelve al cliente y finaliza el proceso.
Si no se encuentra la página (fallo de caché), el proceso continúa con el siguiente paso.
-
El sistema busca la página de datos en la extensión del buffer pool del disco de alta velocidad.
Si se encuentra la página, el sistema la copia al buffer pool en memoria y luego la devuelve al cliente. El proceso finaliza.
Si no se encuentra la página, el proceso continúa con el siguiente paso.
El sistema lee la página de datos del archivo de datos en el disco de alto rendimiento. Luego, el sistema copia la página al buffer pool en memoria y la devuelve al cliente.
La operación de lectura ha finalizado.
Aplicabilidad
Motor: RDS MySQL
Versión: MySQL 8.4 o MySQL 8.0 con una versión menor del motor 20230914 o posterior
Edición: High-availability Edition o RDS Cluster Edition
Categoría: Standard Edition
Familia de instancias: uso general
-
Regiones y zonas: (Para verificar la disponibilidad, consulte la consola. Esta lista es solo de referencia).
Región
Zona
China (Chengdu)
Zone B
China (Beijing)
Zone I
China (Shanghai)
Zone M
Zone N
China (Hangzhou)
Zone J
Facturación
La función Buffer Pool Extension (BPE) es gratuita para instancias RDS MySQL de uso general que utilizan discos de alto rendimiento.
Precauciones
La pérdida de datos en la extensión del buffer pool no afecta los datos de su negocio, ya que se almacenan de forma duradera en el disco de datos. Su instancia continúa operando con normalidad.
Habilitar la función BPE asigna una pequeña cantidad de memoria (4% de
buffer_pool_size). Por lo tanto, el valor predeterminado debuffer_pool_sizese reduce automáticamente en un 4%. Si necesita modificarbuffer_pool_sizeposteriormente, ajústelo según sus métricas de uso de memoria.Después de habilitar o deshabilitar la función BPE, su instancia no estará disponible durante aproximadamente 15 segundos. Se recomienda realizar esta operación fuera del horario pico.
Habilitar la función BPE proporciona una mejora significativa del rendimiento. El efecto es más notable en tipos de instancia más grandes. Por ejemplo, una instancia RDS MySQL de uso general con 8 vCPU y 16 GB de memoria en High-availability Edition (Standard) puede lograr una mejora de rendimiento de hasta un 103 %.
Gestión de BPE
Habilitar BPE
Vaya a la página Instances, seleccione la región de su instancia y haga clic en el ID de la instancia.
En la sección Basic Information, a la derecha de Storage Type, haga clic en Configure Premium ESSD. En el cuadro de diálogo que aparece, active el interruptor Buffer Pool Extension (BPE).
Deshabilitar BPE
Vaya a la página Instances, seleccione la región de su instancia y haga clic en el ID de la instancia.
En la sección Basic Information, a la derecha de Storage Type, haga clic en Configure Premium ESSD. En el cuadro de diálogo que aparece, desactive el interruptor Buffer Pool Extension (BPE).
Prueba de rendimiento
Preparación de la prueba
Método de prueba: Ejecute operaciones de lectura y escritura en una instancia de las mismas especificaciones para comparar las QPS con la función BPE habilitada y deshabilitada.
Tamaño de los datos de prueba: 300 GB
-
Herramienta de prueba: Sysbench (Para obtener más información, consulte la documentación oficial de Sysbench.)
NotaPrimero debe create an ECS instance. La herramienta de prueba de este tema está instalada en una instancia ECS.
-
Instancias de prueba: Prepare dos instancias RDS MySQL en High-availability Edition con un tipo de instancia de uso general. Una instancia debe tener 4 vCPU y 8 GB de memoria, y la otra 8 vCPU y 16 GB de memoria. Las pruebas se ejecutan en cada instancia primero con BPE deshabilitado y luego nuevamente con BPE habilitado.
Edición
Código de tipo de instancia
vCPU y memoria
High-availability Edition
mysql.n2.large.xc
4 vCPU, 8 GB
High-availability Edition
mysql.n2.xlarge.xc
8 vCPU, 16 GB
Método de prueba
Este tema utiliza CentOS como ejemplo para la prueba de rendimiento. Si desea instalar y probar en un sistema operativo diferente, consulte la documentación oficial de Sysbench.
Instalar Sysbench
Ejecute los siguientes comandos para instalar Sysbench.
git clone https://github.com/akopytov/sysbench.git
cd sysbench
git checkout 0.5
yum -y install make automake libtool pkgconfig libaio-devel
yum -y install mariadb-devel
./autogen.sh
./configure
make -j
make install
Probar el rendimiento de QPS de la instancia
Parámetros
La siguiente tabla describe los parámetros utilizados en esta prueba.
|
Parámetro |
Descripción |
|
--tables |
El número de tablas. |
|
--table_size |
El número de filas en cada tabla. |
|
--rand-type |
El tipo de distribución de números aleatorios. |
|
--rand-spec-pct |
El porcentaje de valores considerados "especiales" para la distribución aleatoria especificada. |
|
--threads |
El número de hilos concurrentes. |
|
--time |
La duración de la prueba, en segundos. |
Probar el rendimiento de lectura
-
Preparar datos: Ejecute el siguiente comando para preparar 300 GB de datos (30 tablas con 40 millones de filas cada una).
sysbench oltp_read_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 prepare -
Ejecutar la prueba de lectura: Ejecute el siguiente comando para probar el rendimiento de lectura de la instancia.
sysbench oltp_read_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 run
Probar el rendimiento de escritura
-
Preparar datos: Ejecute el siguiente comando para preparar 300 GB de datos (30 tablas con 40 millones de filas cada una).
sysbench oltp_write_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 prepare -
Ejecutar la prueba de escritura: Ejecute el siguiente comando para probar el rendimiento de escritura de la instancia.
sysbench oltp_write_only --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 run
Probar el rendimiento de lectura/escritura
-
Preparar datos: Ejecute el siguiente comando para preparar 300 GB de datos (30 tablas con 40 millones de filas cada una).
sysbench oltp_read_write --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 prepare -
Ejecutar la prueba de lectura/escritura: Ejecute el siguiente comando para probar el rendimiento mixto de lectura y escritura de la instancia.
sysbench oltp_read_write --tables=30 --table_size=40000000 --rand-type=special --rand-spec-pct=15 --threads=64 --time=100 run
Resultados de la prueba
-
Resultados de la prueba para una instancia RDS MySQL en High-availability Edition (Standard) con un tipo de instancia de uso general de 4 vCPU y 8 GB de memoria:
Rendimiento de lectura: Las QPS permanecen casi sin cambios con BPE habilitado.
Rendimiento de escritura: Las QPS aumentan un 30 % con BPE habilitado.
Rendimiento de lectura/escritura: Las QPS aumentan un 26 % con BPE habilitado.

-
Resultados de la prueba para una instancia RDS MySQL en High-availability Edition (Standard) con un tipo de instancia de uso general de 8 vCPU y 16 GB de memoria:
Rendimiento de lectura: Las QPS aumentan un 80 % con BPE habilitado.
Rendimiento de escritura: Las QPS aumentan un 33 % con BPE habilitado.
Rendimiento de lectura/escritura: Las QPS aumentan un 103 % con BPE habilitado.
